我有GridView
,其中一列使用TemplateField
(LinkButton
)ButtonField
我可以在我的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)
答案 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;
}
为了弄清楚这一点,在处理程序方法中设置调试环境和断点,然后向下钻取类层次结构。调试器是我们的朋友;)
编辑只是提到显而易见的 - 这里的列是硬编码的 - 您可能需要更改它。