【问题标题】:Get gridview row values when checkbox checked选中复选框时获取gridview行值
【发布时间】:2017-11-03 11:59:16
【问题描述】:

我有一个带有复选框的 gridview 来选择行。在选中复选框时,我需要将行值放入字符串/会话中。下面是代码

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"                 
    OnRowCancelingEdit="GridView1_RowCancelingEdit"    
    OnRowEditing="GridView1_RowEditing"  OnRowUpdating="GridView1_RowUpdating"  OnRowDeleting="GridView1_OnRowDeleting"  OnPageIndexChanging="GridView1_PageIndexChanging" OnSelectedIndexChanged="GridView1_SelectedIndexChanged"  Width ="1000px" class="grid" AllowPaging="True" PagerSettings-FirstPageText="First" PagerSettings-LastPageText="Last" PageButtonCount="2" PagerSettings-Mode="NumericFirstLast" PageSize="5">
    <PagerSettings Mode="NumericFirstLast" PageButtonCount="2"  FirstPageText="First" LastPageText="Last"/> 
    <Columns>   
       <asp:TemplateField HeaderText="Id">   
            <ItemTemplate>   
               <asp:CheckBox ID="CheckBox3" runat="server" />
            </ItemTemplate>   
        </asp:TemplateField>   
        <asp:TemplateField HeaderText="Connection">   
            <ItemTemplate>   
                <asp:Label ID="lbl_conn" runat="server" Text='<%#Eval("Connection") %>'></asp:Label>   
            </ItemTemplate>   
        </asp:TemplateField>   

                        <asp:TemplateField HeaderText="UserID">   
            <ItemTemplate>   
                <asp:Label ID="lbl_Usrid" runat="server" Text='<%#Eval("UserID") %>'></asp:Label>   
            </ItemTemplate>   
            <EditItemTemplate>   
                <asp:TextBox ID="txt_Usrid" runat="server" Text='<%#Eval("UserID") %>'></asp:TextBox>   
            </EditItemTemplate>   
        </asp:TemplateField> 
        <asp:TemplateField HeaderText="Password">   
            <ItemTemplate>   
                <asp:Label ID="lbl_pwd" runat="server" Text='<%#Eval("Password") %>'></asp:Label>   
            </ItemTemplate>   
            <EditItemTemplate>   
                <asp:TextBox ID="txt_pwd" runat="server" Text='<%#Eval("Password") %>'></asp:TextBox>   
            </EditItemTemplate>   
        </asp:TemplateField> 
        <asp:TemplateField HeaderText="Connection Name">   
            <ItemTemplate>   
                <asp:Label ID="lbl_conName" runat="server" Text='<%#Eval("Connection_Name") %>'></asp:Label>   
            </ItemTemplate>   
            <EditItemTemplate>   
                <asp:TextBox ID="txt_conName" runat="server" Text='<%#Eval("Connection_Name") %>'></asp:TextBox>   
            </EditItemTemplate>   
        </asp:TemplateField>   


           <asp:TemplateField HeaderText="Edit">   
            <ItemTemplate>   
                <asp:Button ID="btn_Edit" runat="server"  Text=" Edit" class=" btnEdit"  CommandName="Edit" />   
            </ItemTemplate>   
            <EditItemTemplate>   
                <asp:Button ID="btn_Update" runat="server" class=" btnEdit" Text="Update" CommandName="Update"/>   
                <asp:Button ID="btn_Cancel" runat="server" class=" btnEdit" Text="Cancel" CommandName="Cancel"/>   
            </EditItemTemplate>   
        </asp:TemplateField>  
       <asp:TemplateField HeaderText="Delete">   
            <ItemTemplate>   
                <asp:Button ID="btn_Delete" runat="server" class=" btnDelete" Text="Delete" CommandName="Delete" OnClientClick="return confirm('Are you sure you want to delete this event?')" />   
            </ItemTemplate>   

        </asp:TemplateField> 
    </Columns>   
</asp:GridView>   

网格下方有一个按钮。单击按钮时,我需要获取值。

protected void LinkButton1_Click(object sender, EventArgs e)
{
    foreach (GridViewRow item in GdvTestData.Rows)
    {
        CheckBox chk = (item.FindControl("CheckBox3") as CheckBox);
        if (chk.Checked)
        {
            string conn = item.Cells[1].Text;
        }
    }
}

但是 string conn = item.Cells[1].Text; 的值为空 我哪里错了

【问题讨论】:

    标签: c# asp.net gridview checkbox


    【解决方案1】:

    Grid 包含不同的行类型,例如 header rowdata rowfooter row。您只需要从数据行中获取内容,如果是数据行,请先检查行类型,然后尝试获取单元格值。 GridViewRow.RowType Property

    foreach(GridViewRow item in GdvTestData.Rows) {
    // check row is datarow
     if (item.RowType == DataControlRowType.DataRow) {
        CheckBox chk = (item.FindControl("CheckBox3") as CheckBox);
        if (chk.Checked) 
        {          
           Label MyLabel = (Label)item.FindControl("lbl_conn");  
           string conn = MyLabel.Text;   
        }
     }
    }
    

    【讨论】:

    • 在检查行类型时我也得到空值
    • 我认为应该是 if (item.RowType == DataControlRowType.DataRow)
    • 我也只需要一次选中一个复选框。现在我可以选择所有复选框。 (它应该像 gridview 中的单选按钮一样工作)
    • 在选中复选框时它不会触发 selectedindexchange 事件,我想更改所选行的颜色
    • 我试过这个解决方案,但表达式结果是 _chk = {Text = "" Checked = false} 虽然我之前检查过。
    猜你喜欢
    • 2014-07-14
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 2018-06-15
    • 2017-10-06
    • 2012-03-06
    • 2012-09-23
    • 2018-05-08
    相关资源
    最近更新 更多