【发布时间】:2013-11-15 07:26:08
【问题描述】:
我整天都在困扰我的 Gridview 完全有问题。我不经常使用 Gridviews,所以其中一些让我感到困惑,而且 Google 并没有像我希望的那样提供帮助。
我正在尝试将通过 LINQ 创建的对象绑定到网格视图,然后进行一些更新。
XAML:
<asp:GridView runat="server" ID="GV1"
onrowediting="gridViewUsers_RowEditing"
onrowcancelingedit="gridViewUsers_RowCancelingEdit"
onrowdeleting="gridViewUsers_RowDeleting"
onrowupdating="gridViewUsers_RowUpdating"
>
<Columns>
<asp:CommandField ShowEditButton="True" />
</Columns>
</asp:GridView>
代码:
private void BindGrid()
{
List<Room> stuff = new List<Room>();
Hotel = dc1.Rooms.ToList();
GV1.DataSource = Hotel;
GV1.DataBind();
}
protected void gridViewUsers_RowEditing(object sender, GridViewEditEventArgs e)
{
GV1.EditIndex = e.NewEditIndex;
BindGrid();
}
我只想从选定的行中获取 Room 对象并通过 LINQ 将其更新回数据库。但我似乎无法接触到那个物体。我的下一个尝试是从行中获取每个条目。所以我找到了类似下面示例的代码。但一切都是空的。
protected void gridViewUsers_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
string tenant = ((TextBox)(GV1.Rows[e.RowIndex].FindControl("Tenant"))).Text;
string age = ((TextBox)(GV1.Rows[e.RowIndex].FindControl("Age"))).Text;
string roomno = ((TextBox)(GV1.Rows[e.RowIndex].FindControl("Room_No"))).Text;
BindGrid();
}
【问题讨论】:
-
我认为这只是一个错字,但是您的
gridviewID 是GV1而在更新事件时它是gridViewUsers_RowUpdating所以您确定您正在访问正确的网格视图吗?? -
这是一个错字。方法名称取自我找到的另一个 GridView。它指向正确的方法,我正在追踪该方法。
-
如果您没有明确定义列,那么正如
Yevgeniy.Chernobrivets发布的那样定义您的列,然后您可以使用Textbox txtbxtenant = (TextBox)row.FindControl("Tenant");轻松访问您的控件 -
我确实更改了 gridview 以明确定义列。很抱歉我不能给你这个例子,因为我现在在工作并且远离代码。但是文本框 txtbxtenant = (TextBox)row.FindControl("Tenant");我上次尝试时仍然拉回 null。
-
到目前为止我最接近的是 ((TextBox)GV1.Rows[e.RowIndex].Cells[1].Controls[0]).Text 拉回原始值。我找不到编辑后的值。 GV1.Rows[e.RowIndex].Cells[1].Controls.Count 为 1,因此单元格中没有任何其他控件。