我有一些列的GridView。所有列都是boundfield,如:
<asp:BoundField DataField="orderId" HeaderText="orderId"
SortExpression="orderId"></asp:BoundField>
最后一栏是:
<asp:LinkButton ID="LinkButton1" runat="server"
CommandName="" onclick="LinkButton1_Click" Text="Button"></asp:LinkButton>
如你所见,有一些方法的“onclick”......如:
lbltest.Text = gv_order.Rows[gv_order.SelectedIndex].Cells[2].Text;
使用该代码我得到(offcourse)我在单元格号2中所选行上的内容。如何从单击按钮而没有“selceted row”的同一行(以及单元格编号2)获取值?例如:当我点击第2行的按钮时 - 我得到该行的单元格2。
那可能吗?
答案 0 :(得分:2)
如果您想以更干净的方式检索'orderid',可以使用CommandName
,CommandArgument
属性和OnRowCommand
事件,如下所示:
<asp:GridView (...) OnRowCommand="Gv_RowCommand" (...)>
...
<asp:LinkButton ID="LinkButton1" runat="server" CommandName="Select"
CommandArgument='<%# Bind("orderId") %>' Text="Button"></asp:LinkButton>
并在代码背后:
protected void Gv_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Select")
{
int selectedOrderId = Convert.ToInt32(e.CommandArgument);
// ...
}
}
我希望这是你想要做的。
修改 - 我对您的评论的回答:
然后,它稍微复杂一些,并以某种方式使用'selectedRow'。在我自己的代码中,我使用这种方法:
<asp:GridView ID="gv1" (...) DataKeyNames="orderId,email,username"
OnRowCommand="Gv_RowCommand" (...)>
...
<asp:LinkButton ID="LinkButton1" runat="server" CommandName="Select"
CommandArgument='<%# DataBinder.Eval(Container,"RowIndex") %>' Text="Button">
</asp:LinkButton>
并在代码背后:
protected void Gv_RowCommand(object sender, GridViewCommandEventArgs e)
{
int selectedRowIndex = Convert.ToInt32(e.CommandArgument);
if (e.CommandName == "Select")
{
int orderId = Convert.ToInt32(gv1.DataKeys[selectedRowIndex]["orderId"]);
string email = gv1.DataKeys[selectedRowIndex]["email"].ToString();
// ...
}
}