网格视图行单元格在按钮中返回空字符串 单击网格视图中的事件启动

本文关键字:网格 视图 单击 事件 启动 字符串 返回 单元格 按钮 | 更新日期: 2023-09-27 18:31:29

我对这个问题感到困惑。

我在网格视图的模板字段旁边放置了一个按钮,并希望在单击该相应按钮时从该特定 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();
}

希望这有帮助..试一试..