我对这个问题感到困惑。
我在网格视图的模板字段旁边放置了一个按钮,并希望在单击该相应按钮时从该特定 GridView 行返回数据。
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="Button2" CssClass ="btnSkin" runat="server" Text="Answer" Width="117px" onclick="Button2_Click" />
</ItemTemplate>
</asp:TemplateField>
在按钮单击事件启动中,我想通过创建 GridViewRow 元素来读取该数据。
protected void Button2_Click(object sender, EventArgs e)
{
GridViewRow gvr = (GridViewRow)(sender as Control).Parent.Parent;
Label8.Text = gvr.Cells[1].Text;
Label10.Text = gvr.Cells[2].Text;
Label12.Text = gvr.Cells[3].Text;
}
现在的问题是,GridViewRow 单元格返回空字符串。
我该怎么办?????
使用 <asp:TemplateFields>
时,您实际上需要找到控件中的文本,例如您在<ItemTemplate>
中使用的<asp:Label>
文本。
不会有文本,而是单元格内的控件有文本。
因此,假设 ,您的一个<ItemTemplate>
中有一个标签:
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("CustomerID") %>'>
</asp:Label>
</ItemTemplate>
然后使用按钮中的以下代码访问此标签控件的文本 单击事件:[假设第二列包含上述定义的<ItemTemplate>
]
protected void Button2_Click(object sender, EventArgs e)
{
GridViewRow gvr = (GridViewRow)(sender as Control).Parent.Parent;
String str = ((Label)gvr.Cells[1].FindControl("Label1")).Text;
}
我找到了空字符串错误背后的原因。
Gridview.Cells[i].Text
仅在字符串值为<asp:BoundField>
时返回字符串值
如果它是一个<asp:TemplateField>
并且您在<ItemTemplate>
内部有一些ASP控件,则必须遵循FindControl("<control_id>")
方法。
在这里,基本上我们通过其 ID 查找该特定 GridviewRow
Cell 中的控制对象,并将其转换为相应的控件类型。现在,我们可以像从代码隐藏调用任何其他 asp 控件一样使用它。
String str = ((Label)gvr.Cells[1].FindControl("Label1")).Text;
尝试使用 GridView.RowCommand 事件,并参考以下链接了解相同内容
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowcommand.aspx
希望这对你有帮助。
请检查您是否在页面加载时正确绑定了网格。
if(!IsPostBack)
{
BindgridView();
}
希望这有帮助..试一试..