GridView - 选择第一行不起作用
Posted
技术标签:
【中文标题】GridView - 选择第一行不起作用【英文标题】:GridView - select first row doesn't work 【发布时间】: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) 【参考方案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。
【讨论】:
以上是关于GridView - 选择第一行不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Jquery 类选择器在 ASP.Net Gridview 中不起作用
UIScrollView 选择中的多行 UITextView 不起作用