单击编辑时,Gridview CheckBoxList检查状态未保持 - 复杂数据绑定

时间:2016-04-11 19:55:43

标签: c# asp.net gridview

我有一个带有几个BoundFields的GridView到SQLDataSource(SelectCommand是一个存储过程)。 DataSourceId和DataKeyNames在GridView中指定(在aspx页面中)。这很好用。 GridView的一列是一个带有CheckBoxList的TemplateField和EditItemTemplate。 CheckBoxList的DataSource(从存储过程返回的DataSet.Table [0]),DataTextField,DataValueField和DataBind()在GridView1_RowDataBound事件中的代码后面设置。这也很好。 CheckBoxList的初始Checked状态在GridView1_RowDataBound事件中设置。 Checked状态由数据库表中的记录确定(一个名为Modules_Platforms的表,它链接Module Ids,GridView的DataKeyNames,Platform Ids,CheckBoxList的DataValueField)。当页面加载时CheckBoxList的Checked状态很好,但是当我单击GridView中的Edit链接时,正在编辑的行中的所有复选框都会丢失其Checked状态并且未被选中。单击“取消”时,将返回正确的“已检查”状态,单击“编辑”,选择复选框并单击“更新”,将显示正确的“已检查”状态。我希望单击“编辑”时复选框保持其“已检查”状态,这样用户就不必记住已选中并重新选择它们的那些。

我应该注意,当页面加载时没有启用CheckBoxList(在ItemTemplate中没有启用),但是在EditItemTemplate中启用了它。

我已经搜索过并且没有找到任何拥有如此复杂的GridView并且CheckBoxList与我的示例匹配的人。我将相同的代码放在GridView1_RowEditing()方法中,该方法绑定CheckBoxList并在GridView1_RowDataBound()中设置Checked值,这不起作用。然后我只将代码设置为GridView1_RowEditing()中的Checked状态,这也不起作用。我也尝试在下面显示的代码之前将GridView置于GridView1_RowEditing()的编辑模式中,但这也不起作用。

GridView中的行显示模块名称,CheckBoxList中每个项目的文本显示平台名称。平台名称在每一行中都相同,但Checked状态基于Module Id和Platform Id的组合,并从Modules_Platforms表中读取,如上面第一段所述。

我正在显示我的GridView(aspx)代码以及GridView1_RowDataBound()和GridView1_RowEditing()的代码。建议是非常需要的!感谢。

<asp:GridView ID="GridView1" runat="server" DataSourceID="ModulesDataSource" DataKeyNames="MODULE_ID" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" GridLines="None" PageSize="50" OnRowDataBound="GridView1_RowDataBound" OnRowUpdating="GridView1_RowUpdating" OnRowEditing="GridView1_RowEditing" OnRowCreated="GridView1_RowCreated">
<RowStyle BackColor="#EFF3FB" />
<Columns>
    <asp:CommandField ShowDeleteButton="False" ShowEditButton="True"/>
    <asp:TemplateField>
        <ItemTemplate>
            <asp:LinkButton ID="LinkButton1" Runat="server" OnClientClick="return confirm('Are you sure you want to delete this record?');"  CommandName="Delete">Delete</asp:LinkButton>
        </ItemTemplate>
    </asp:TemplateField>
    <asp:BoundField HeaderText="Module Id" DataField="MODULE_ID" SortExpression="MODULE_ID"></asp:BoundField>
    <asp:BoundField HeaderText="Module Name" DataField="MODULE_NAME"  SortExpression="MODULE_NAME"></asp:BoundField>
    <asp:BoundField HeaderText="Key Designator" DataField="MODULE_DESIGNATOR" SortExpression="MODULE_DESIGNATOR"></asp:BoundField>
    <asp:TemplateField HeaderText="Platforms">
        <ItemTemplate>
            <asp:CheckBoxList ID="cblPlatforms" runat="server" RepeatDirection="Horizontal" Enabled="false">
             </asp:CheckBoxList> 
        </ItemTemplate> 
        <EditItemTemplate>
            <asp:CheckBoxList ID="cblPlatforms" runat="server" RepeatDirection="Horizontal">  
            </asp:CheckBoxList>
        </EditItemTemplate>
    </asp:TemplateField>
    </Columns>
</asp:GridView>
<asp:SqlDataSource ID="ModulesDataSource" runat="server" OnUpdated="ModulesDataSource_Updated" ConnectionString="ConnectionStrings:ConnString" SelectCommand="GetModules" SelectCommandType="StoredProcedure" UpdateCommand="UpdateModule" UpdateCommandType="StoredProcedure" DeleteCommand="DeleteModule" DeleteCommandType="StoredProcedure"> 
<DeleteParameters>
    <asp:Parameter Name="MODULE_ID" Type="Int32" Direction="Input"/>
    <asp:Parameter Direction="InputOutput" Name="Result" Type="Int32" />
</DeleteParameters>
<UpdateParameters>
    <asp:Parameter Name="MODULE_ID" Type="Int32" Direction="Input"/>
    <asp:Parameter Name="MODULE_NAME" Type="String" Direction="Input"/>
    <asp:Parameter Name="MODULE_DESIGNATOR" Type="String" Direction="Input"/>
    <asp:Parameter Direction="InputOutput" Name="Result" Type="Int32" />
</UpdateParameters>
</asp:SqlDataSource>

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        // Populate CheckBoxList controls from PLATFORM_MASTER table
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            CheckBoxList cblPlatforms = (CheckBoxList)e.Row.FindControl("cblPlatforms");
            DAL dal = new DAL();
            DataSet dsPlatforms = new DataSet();
            dsPlatforms = dal.GetPlatforms_Active();

            if (dsPlatforms != null)
            {
                if (dsPlatforms.Tables != null)
                {
                    if (dsPlatforms.Tables.Count > 0)
                    {
                        if (dsPlatforms.Tables[0] != null)
                        {
                            if (dsPlatforms.Tables[0].Rows != null)
                            {
                                if (dsPlatforms.Tables[0].Rows.Count > 0)
                                {
                                    cblPlatforms.DataSource = dsPlatforms.Tables[0];
                                    cblPlatforms.DataTextField = "PLATFORM";
                                    cblPlatforms.DataValueField = "PLATFORM_ID";
                                    cblPlatforms.DataBind();
                                }
                            }  // end if (dsPlatforms.Tables[0].Rows != null)
                        }  // end if (dsPlatforms.Tables[0] != null)
                    }  // end if (dsPlatforms.Tables.Count > 0)
                }  // end if (dsPlatforms.Tables != null)
            }  // end if (dsPlatforms != null)
        }  // end if (e.Row.RowType == DataControlRowType.DataRow)

        // Display CheckBoxList controls status (checked / unchecked) from MODULES_PLATFORMS table
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            CheckBoxList cblPlatforms = (CheckBoxList)e.Row.FindControl("cblPlatforms");

            DAL dal= new DAL();
            DataSet dsModPlats = new DataSet();
            dsModPlats = dal.GetModules_Platforms();

            if (dsModPlats != null)
            {
                if (dsModPlats.Tables != null)
                {
                    if (dsModPlats.Tables.Count > 0)
                    {
                        if (dsModPlats.Tables[0] != null)
                        {
                            if (dsModPlats.Tables[0].Rows != null)
                            {
                                if (dsModPlats.Tables[0].Rows.Count > 0)
                                {
                                    for (int i = 0; i < cblPlatforms.Items.Count; i++)
                                    {
                                        for (int j = 0; j < dsModPlats.Tables[0].Rows.Count; j++)
                                        {
                                            if (Convert.ToInt32(dsModPlats.Tables[0].Rows[j]["PLATFORM_ID"]) == Convert.ToInt32(cblPlatforms.Items[i].Value))
                                            {
                                                if (e.Row.Cells[2].Text != "")
                                                {
                                                    if (Convert.ToInt32(e.Row.Cells[2].Text) == Convert.ToInt32(dsModPlats.Tables[0].Rows[j]["MODULE_ID"]))
                                                    {
                                                        cblPlatforms.Items[i].Selected = true;
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }  // end if (dsModPlats.Tables[0].Rows != null)
                        }  // end if (dsModPlats.Tables[0] != null)
                    }  // end if (dsModPlats.Tables.Count > 0)
                }  // end if (dsModPlats.Tables != null)
            }  // end if (dsModPlats != null)
        } // end if (e.Row.RowType == DataControlRowType.DataRow)
    }

    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
        CheckBoxList cblPlatforms = ((CheckBoxList)GridView1.Rows[e.NewEditIndex].FindControl("cblPlatforms"));

        DAL dal= new DAL();
        DataSet dsModPlats = new DataSet();
        dsModPlats = dal.GetModules_Platforms();

        if (dsModPlats != null)
        {
            if (dsModPlats.Tables != null)
            {
                if (dsModPlats.Tables.Count > 0)
                {
                    if (dsModPlats.Tables[0] != null)
                    {
                        if (dsModPlats.Tables[0].Rows != null)
                        {
                            if (dsModPlats.Tables[0].Rows.Count > 0)
                            {
                                for (int i = 0; i < cblPlatforms.Items.Count; i++)
                                {
                                    for (int j = 0; j < dsModPlats.Tables[0].Rows.Count; j++)
                                    {
                                        if (Convert.ToInt32(dsModPlats.Tables[0].Rows[j]["PLATFORM_ID"]) == Convert.ToInt32(cblPlatforms.Items[i].Value))
                                        {
                                            if (GridView1.Rows[e.NewEditIndex].Cells[2].Text != "")
                                            {
                                                if (Convert.ToInt32(GridView1.Rows[e.NewEditIndex].Cells[2].Text) == Convert.ToInt32(dsModPlats.Tables[0].Rows[j]["MODULE_ID"]))
                                                {
                                                    cblPlatforms.Items[i].Selected = true;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }  // end if (dsModPlats.Tables[0].Rows != null)
                    }  // end if (dsModPlats.Tables[0] != null)
                }  // end if (dsModPlats.Tables.Count > 0)
            }  // end if (dsModPlats.Tables != null)
        }  // end if (dsModPlats != null)
    }

0 个答案:

没有答案