3

I am confused with this problem.

I have put a button in side the template field of a gridview and want to return the data from that specific GridView Row when that corresponding button is clicked.

<asp:TemplateField>
     <ItemTemplate>
          <asp:Button ID="Button2" CssClass ="btnSkin" runat="server" Text="Answer" Width="117px" onclick="Button2_Click" />
     </ItemTemplate>
</asp:TemplateField>

In the button click event fireup, I want to read that data by creating a GridViewRow Element.

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;
}

Now the problem is, the GridViewRow Cells are returning empty strings.

What should I do?????

4

4 回答 4

3

使用时<asp:TemplateFields>,您实际上需要找到控件内的文本,例如<asp:Label>您在<ItemTemplate>.

单元格不会有文本,它的单元格内的控件有文本。

因此,如果假设,您的其中一个<ItemTemplate>as 中有一个标签:

<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("CustomerID") %>'>
</asp:Label>
</ItemTemplate>

然后使用按钮单击事件中的以下代码访问此标签控件的文本:[假设,第 2 列包含上述<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;
    }
于 2013-09-16T11:48:50.793 回答
3

我找到了空字符串错误背后的原因。

Gridview.Cells[i].Text仅当它是<asp:BoundField>

如果它是一个<asp:TemplateField>并且你有一些 ASP 控件在里面<ItemTemplate>,你必须遵循这个FindControl("<control_id>")方法。

在这里,基本上我们GridviewRow通过它的 ID 在那个特定的 Cell 中查找控件对象,并将其转换为相应的 Control Type。现在,我们可以使用它,因为我们从代码隐藏中调用任何其他 asp 控件。

String str = ((Label)gvr.Cells[1].FindControl("Label1")).Text;
于 2014-02-12T08:18:29.110 回答
1

尝试使用 GridView.RowCommand 事件并参考以下链接

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowcommand.aspx

希望这可以帮助你。

于 2013-09-16T06:51:34.543 回答
0

请检查您是否在页面加载时正确绑定了网格。

  if(!IsPostBack)
{
  BindgridView();
}

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

于 2013-09-16T11:21:59.980 回答