如何在ASP.NET中将DataRow从UI控件获取到ascx.cs

本文关键字:控件 UI 获取 cs ascx DataRow ASP NET 中将 | 更新日期: 2023-09-27 18:20:42

我有一个绑定到DataGrid的DataTable。在数据行中创建一个复选框。当我选中复选框时,后面的代码会被选中,但我不知道如何访问DataRow。

  <asp:DataGrid   ID="dgCaseStatusTypes" 
                        runat="server" 
                        AutoGenerateColumns="False" 
                        CellPadding="5"
                        DataKeyField="InmateCaseStatusID" 
                        OnItemCommand="dgCaseStatusTypes_ItemCommand">
        <Columns>
            <asp:BoundColumn DataField="Code" HeaderText="Code"></asp:BoundColumn>
            <asp:BoundColumn DataField="Text" HeaderText="Text"></asp:BoundColumn>
            <asp:TemplateColumn HeaderText="Prebook Visible" >
                <ItemTemplate>
                    <asp:CheckBox   id="chkBox1" 
                                    runat="server" 
                                    AutoPostBack="true" 
                                    checked= '<%# Eval("IsPreBookVisibleBool") %>' 
                                    OnCheckedChanged="OnCheckedChanged_Event"
                                    ></asp:CheckBox>
                 </ItemTemplate>
            </asp:TemplateColumn>
     </Columns>
</asp:DataGrid>
protected void OnCheckedChanged_Event(object sender, System.EventArgs e)
{
     CheckBox cb = sender as CheckBox;
     //how to get the DataRow that created this control?
}

如何在ASP.NET中将DataRow从UI控件获取到ascx.cs

我真的只需要点击内容的ID和CheckBox状态。以下内容对我有效。

 <asp:DataGrid   ID="dgCaseStatusTypes" 
                    runat="server" 
                    AutoGenerateColumns="False" 
                    CellPadding="5"
                    DataKeyField="InmateCaseStatusID" 
                    OnItemCommand="dgCaseStatusTypes_ItemCommand">
    <Columns>
        <asp:TemplateColumn HeaderText="ID Label" Visible="false">
            <ItemTemplate>
                <asp:Label  id="IDLabel" 
                            runat="server" 
                            AutoPostBack="true" 
                            Text='<%# Eval("InmateCaseStatusID") %>' 
                            ></asp:Label>
             </ItemTemplate>
        </asp:TemplateColumn>
        <asp:BoundColumn DataField="Code" HeaderText="Code"></asp:BoundColumn>
        <asp:BoundColumn DataField="Text" HeaderText="Text"></asp:BoundColumn>
        <asp:TemplateColumn HeaderText="Prebook Visible" >
            <ItemTemplate>
                <asp:CheckBox   id="chkBox1" 
                                runat="server" 
                                AutoPostBack="true" 
                                checked= '<%# Eval("IsPreBookVisibleBool") %>' 
                                OnCheckedChanged="OnCheckedChanged_Event"
                                ></asp:CheckBox>
             </ItemTemplate>
        </asp:TemplateColumn>
    </Columns>
</asp:DataGrid>

     protected void OnCheckedChanged_Event(object sender, System.EventArgs e)
        {
            CheckBox cb = sender as CheckBox;
            bool isChecked = cb.Checked; 
            DataGridItem dgi = cb.NamingContainer as DataGridItem;
            Label lbl = dgi.FindControl("IDLabel") as Label;
            string Id = lbl.Text as string; 
}

您需要将数据网格的数据源保持在会话或视图状态。完成此操作后,您需要知道选中复选框时单击的行。然后,您可以获取绑定到该行的对象。