【问题标题】:GridView - select first row doesn't workGridView - 选择第一行不起作用
【发布时间】:2018-11-23 23:17:35
【问题描述】:

我对 gridview 有疑问,请选择一行的复选框。

我在标签中得到正确的文本,但如果我从第一行中选择复选框:

我明白了:房间不选

按钮点击

protected void bookButton_Click(object sender, EventArgs e) {

        foreach (GridViewRow row in GridView1.Rows)
        {


            var chk = (HtmlInputCheckBox) row.FindControl("checkboxID");
            int id_room = Convert.ToInt32(row.Cells[4].Text);
            if (chk.Checked)
            {
                Label1.Text = id_room.ToString();

                /* 
                String CS = ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString;
                 using (SqlConnection con = new SqlConnection(CS))
                 {
                        //STORED PROCEDURE CALL
                 }

            }

            else
            {

                Label1.Text ="Room not pick";
            }
                */
        }
    }

和网格视图

                            <asp:GridView ID="GridView1" runat="server" CssClass="table border-0 table-hover" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" GridLines="None" BorderWidth="0px">

                <Columns>
                    <asp:BoundField DataField="Number" HeaderText="Number" SortExpression="Number" />
                    <asp:BoundField DataField="Picture" HeaderText="Picture" SortExpression="Picture" />
                    <asp:BoundField DataField="Price" HeaderText="Price" SortExpression="Price" />
                     <asp:BoundField DataField="ID"  HeaderText="IDP" SortExpression="ID" />
                    <asp:TemplateField>

                        <ItemTemplate>
                            <input type="checkbox" CssClass="custom-checkbox" ID="checkboxID" runat="server"  />
                        </ItemTemplate>

                        <ItemStyle HorizontalAlign="Center" />
                    </asp:TemplateField>

                </Columns>
            </asp:GridView>

【问题讨论】:

  • 告诉我你选择的事件或复选框选中的事件
  • @ArunPratap 我没有。我检查这里是否选择了 chechbox: var chk = (HtmlInputCheckBox) row.FindControl("checkboxID"); int id_room = Convert.ToInt32(row.Cells[4].Text); if (chk.Checked)

标签: c# asp.net gridview checkbox


【解决方案1】:

索引错误。它的第 4 列。作为一个从零开始的索引,你应该使用 3

int id_room = Convert.ToInt32(row.Cells[3].Text);

更简洁的方法是使用ItemTemplate

<asp:TemplateField HeaderText="IDP" SortExpression="ID">
    <ItemTemplate>
        <asp:Label ID="roomID" runat="server" />
    </ItemTemplate>
</asp:TemplateField>

然后像访问它

foreach(GridViewRow row in GridView1.Rows) {
    var chk = (HtmlInputCheckBox)row.FindControl("checkboxID");
    var selectedRoomID = (Label)row.FindControl("roomID");
    if (chk.Checked) {
        Label1.Text = selectedRoomID.Text;
    }
}

【讨论】:

  • 在 gridview 我有 5 列: ROOMNUMBER |图片 |价格 |复选框 | ID_ROOM,所以 ID_ROOM 是 4。我认为与否?
  • 复选框出现在 room_id 之后。所以复选框是第 5 列,而 room_id 是第 4 列。所以从零开始的索引将是 3
  • 我将 row.Cells[4].Text 更改为 row.Cells[3].Text 而没有更改其他代码。它仍然无法正常工作:(
【解决方案2】:

好的,谢谢@naveen!我像这样更改代码:

 foreach (GridViewRow row in GridView1.Rows)
        {
            var chk = (HtmlInputCheckBox)row.FindControl("checkboxID");
            var selectedRoomID = (Label)row.FindControl("Label2");

            if (chk.Checked && chk != null)
            {

                Label1.Text = selectedRoomID.Text;
            }
            else
               {
              Label1.Text = "error";
                }

并将 ID_ROOM col 更改为 ItemTemplates。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-24
    • 1970-01-01
    • 1970-01-01
    • 2018-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多