在GridView中删除记录时,DropDown Vlaues会更改 [英] DropDown Vlaues are Changed when delete a record in GridView

查看:91
本文介绍了在GridView中删除记录时,DropDown Vlaues会更改的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 Gridview ,因为其中一列是 DropDownList .我的网格中有10条记录,而DropDown值类似于 1, 2,3 .... 10.这是存储我的DropDown值的格式,如果我删除第4行,那么我的 DropDown值将被更改 1,2,3,4 .... 9 .这是我的任务,但我正在获取这种格式 1,2,3,-,5 ... 10 .任何人都可以帮助我做到这一点.我编写了这样的代码

这是删除按钮代码:

I have a Gridview ,in that one of the Column is DropDownList .I have 10 Records in my Grid and my DropDown Values are like this 1,2,3....10.This is the format to store my DropDown values ,if i delete 4th Row ,then my DropDown Values are Changed like 1,2,3,4....9.This is my task ,but i''m getting this format 1,2,3,--,5...10.Any one Can help me to do this .I wrote code like this

This is Remove Button Code:

protected void btnToRemove_OnClick(object sender, EventArgs e)
        {
            EIPEDMS objEDMS = new EIPEDMS();
            string Result = "";

            DataTable dtTo = ViewState["PAM"] as DataTable;

            foreach (GridViewRow gvrTo in gvTo.Rows)
            {
                CheckBox chkSelect = gvrTo.FindControl("chkSelect") as CheckBox;

                if (chkSelect.Checked == true)
                {
                    Label lblMember_Id = gvrTo.FindControl("lblMember_Id") as Label;

                    Result = objEDMS.Delete_Project_Alert_Members(ddlProject.SelectedValue, lblMember_Id.Text, Member);

                }
            }
            DataSet dsPAM = objEDMS.Get_Project_Alert_Member(ddlProject.SelectedValue);
            dtTo = dsPAM.Tables[0];
            ViewState["PAM"] = dtTo;

            DataView dvTo = dtTo.DefaultView;
            dvTo.RowFilter = "Receiver_Type=2";

            gvTo.DataSource = dvTo;
            gvTo.DataBind();

            for (int i = 0; i < gvTo.Rows.Count; i++)
            {
                dtTo = dvTo.ToTable();
                DropDownList ddl = (DropDownList)gvTo.Rows[i].FindControl("ddlSortTo");
                ddl.SelectedValue = dtTo.Rows[i]["Sort_By"].ToString();

            }
        }





这是DataBound代码:







This is DataBound Code:



protected void gvTo_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                EIPEDMS objEDMS = new EIPEDMS();

                DataTable dtTo = ViewState["PAM"] as DataTable;
                                
                DataView dvTo = dtTo.DefaultView;

                dvTo.RowFilter = "Receiver_Type=2";

                DropDownList ddlSortTo = (DropDownList)e.Row.Cells[2].FindControl("ddlSortTo");
                


                ddlSortTo.DataSource = dvTo;

                ddlSortTo.DataTextField = "Sort_By_Dup";
                ddlSortTo.DataValueField = "Sort_By_Dup";

                ddlSortTo.DataBind();

            }
        }





已选择此索引更改事件代码:






This is Selected?IndexChanged Event Code:


protected void ddlSortTo_OnSelectedIndexChanged(object sender, EventArgs e)
        {
            EIPEDMS objEDMS = new EIPEDMS();

            DataTable dtTo = ViewState["PAM"] as DataTable;


            DataView dvTo = dtTo.DefaultView;
            dvTo.RowFilter = "Receiver_Type=2";

            DataTable dt = new DataTable();


            dt = dvTo.ToTable();
            DropDownList ddl1 = sender as DropDownList;
            foreach (GridViewRow myRow in gvTo.Rows)
            {
                DropDownList ddl = myRow.FindControl("ddlSortTo") as DropDownList;
                if (ddl.ClientID == ddl1.ClientID)
                {

                    Label lblMember_Id = myRow.FindControl("lblMember_Id") as Label;
                    lblMember_Id.Text = ddl1.SelectedValue;
                    int index = myRow.RowIndex;//Convert.ToInt32(lblMember_Id.Text);
                    dt.Rows[index]["Sort_By"] = lblMember_Id.Text;


                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        if (dt.Rows[i][3] != dt.Rows[i][4])
                        {
                            if (Convert.ToInt32(dt.Rows[i][3]) < Convert.ToInt32(dt.Rows[i][4]))
                            {
                                int val = Convert.ToInt32(dt.Rows[i][3]);

                                do
                                {
                                    for (int j = 0; j < dt.Rows.Count; j++)
                                    {
                                        if (val == Convert.ToInt32(dt.Rows[j][4]) && val < Convert.ToInt32(dt.Rows[i][4]))
                                        {
                                            val = val + 1;
                                            dt.Rows[j][4] = val;
                                        }
                                        if (val == j + 1)
                                        {
                                            dt.Rows[j][4] = dt.Rows[j][3];
                                        }
                                    }

                                    val++;
                                }
                                while (val < Convert.ToInt32(dt.Rows[i][4]));
                            }

                            else if (Convert.ToInt32(dt.Rows[i][3]) > Convert.ToInt32(dt.Rows[i][4]))
                            {
                                int val = Convert.ToInt32(dt.Rows[i][3]);

                                for (int j = val - 1; j >= 0; j--)
                                {
                                    if (val == Convert.ToInt32(dt.Rows[j][4]) && val > Convert.ToInt32(dt.Rows[i][4]))
                                    {
                                        val = val - 1;
                                        dt.Rows[j][4] = val;
                                    }
                                    if (val == j + 1)
                                    {
                                        dt.Rows[j][4] = dt.Rows[j][3];
                                    }
                                    dt.Rows[j][3] = dt.Rows[j][4];
                                   
                                }
                            }
                        }
                    }
                    dt.AcceptChanges();
                    for (int i = 0; i < dtTo.Rows.Count; i++)
                    {
                        for (int j = 0; j < dt.Rows.Count; j++)
                        {
                            if (Convert.ToInt32(dtTo.Rows[i][0]) != Convert.ToInt32(dt.Rows[j][0]))
                            {
                                dtTo.Rows[j][4] = dt.Rows[j][4];
                            }

                        }
                    }
                    
                    break;
                }
            }
            //DataSet dsPAM = objEDMS.Get_Project_Alert_Member(ddlProject.SelectedValue);
            //dt= dsPAM.Tables[0];

            ViewState["PAM"] = dtTo;

            gvTo.DataSource = dt;
            gvTo.DataBind();
                        
            //gvTo.Sort("Sort_By_Dup", SortDirection.Ascending);

            for (int i = 0; i < gvTo.Rows.Count; i++)
            {

                DropDownList ddlTo = (DropDownList)gvTo.Rows[i].FindControl("ddlSortTo");
                ddlTo.SelectedValue = dt.Rows[i][4].ToString();

            }
        }

推荐答案

我猜问题出在下面的行中
I guess the problem is in the following line
ddl.SelectedValue = dtTo.Rows[i]["Sort_By"].ToString();


由于 Sort_By 行在您每次删除行时都会更新,因此对于已删除的行,该行将不存在.
因此,如果您要分配该值,则显然它将为下拉选择项提供空白值.

您还需要更新viewstate中的值以反映更改.
当您删除第四行时,如果您可以根据行号更新viewstate中的下拉列表的值,那么它将为您提供所需的内容.试试吧...

祝一切顺利...
谢谢...


Because the Sort_By Row gets updated each time you delete a row and for a deleted row it will not exist.
So, if you will assign that value, it will obviously give blank value to the dropdown selection.

You also need to update the value in the viewstate in order to reflect the changes.
When you delete the 4th row, at that time, if you can update the value of the dropdowns in viewstate according to the row number, then it will give you what you want. Try it out...

All the best...
Thanks...


这篇关于在GridView中删除记录时,DropDown Vlaues会更改的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆