获取使用ButtonField的列的值

时间:2012-02-27 21:46:19

标签: c# asp.net gridview

我有GridView,其中一列使用TemplateFieldLinkButtonButtonField 我可以在我的Grid中获取特定单元格的值就好了。使用:

GridViewRow row = GridView1.SelectedRow;

lblSalesmanCustomers.Text = row.Cells[2].Text;

然后我在Label中显示该单元格中的文本。

但是我无法使用ButtonField模板。它仅适用于非模板列。

如何在使用ButtonField / TemplateField的列中获取特定单元格的值?

编辑:这是我的GridView中的My Button Field Code: <asp:ButtonField DataTextField="Customer" HeaderText="Customer" ButtonType="Link" CommandName="Select" />

此外,这种情况正在发生:

protected void gvManagerCustomers_SelectedIndexChanged(object sender, EventArgs e)

3 个答案:

答案 0 :(得分:2)

查看var Button = row.Cells["Customer"].Controls[0];是否会检索您需要的按钮。

您可能需要将其强制转换为正确的类型。

答案 1 :(得分:1)

我知道超链接字段和buttonfield存在问题,但有一个解决方法。假设您正在基于名为ButtonNames的列绑定buttonfield文本,并在该列中包含所有名称,例如“button bob”,“button jerry”等。在GridView中,添加一个不可见的列作为第一列和将其值绑定为ButtonNames。您可以通过设置其中一个可见性属性使其不可见。从头顶忘了它是什么。然后,当您想要获取buttonfield的文本时,只需从该不可见列中获取数据,而不是同样适用于超链接。

编辑:这是一些代码。

<asp:BoundColumn ItemStyle-HorizontalAlign="Left" DataField="ButtonNames" SortExpression="ButtonNames" HeaderText="TriageId" Visible="false" ReadOnly="true"></asp:BoundColumn>

然后通过字符串s = e.Item.Cells [0] .Text检索它,其中e是DataGridCommandEventArgs或那种性质的东西。

答案 2 :(得分:0)

单元格中将有一个控件集合 - 您可以在那里访问它。

虽然更简单的方法是使用类似的东西:

Label l = row.FindControl("myControlId");

编辑:如果上面的确切方法不起作用 - 但您可以使用控件,以下工作正常,请注意我们在这里做的事情几乎充斥着糟糕的做法(但随后毕竟,为了方便起见,我们正在使用GridView。

protected void gvManagerCustomers_SelectedIndexChanged(object sender, EventArgs e)
{
    var x = ((sender as GridView).SelectedRow.Cells[0].Controls[0] as LinkButton).Text;
}

为了弄清楚这一点,在处理程序方法中设置调试环境和断点,然后向下钻取类层次结构。调试器是我们的朋友;)

编辑只是提到显而易见的 - 这里的列是硬编码的 - 您可能需要更改它。