我有一个gridviewMain。每当我单击第1行的CLOSE linkbutton时,我想获得值aa。单击第2行上的关闭获取bb的值。任何想法。
A B C
aa xx 3 CLOSE
bb yy 4 CLOSE
cc zz 5 CLOSE
ASPX
<asp:BoundField DataField="afield" HeaderText="A"
SortExpression="afield" >
<ItemStyle HorizontalAlign="Center" />
</asp:BoundField>
<asp:BoundField DataField="bfield" HeaderText="B" SortExpression="cfield" >
<ItemStyle HorizontalAlign="Center" />
</asp:BoundField>
<asp:BoundField DataField="cfield" HeaderText="C" SortExpression="cfield" >
<ItemStyle HorizontalAlign="Center" />
</asp:BoundField>
<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:LinkButton ID="lbClose" runat="server" CausesValidation="False" CommandName="CloseClicked" Text="Close"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
答案 0 :(得分:14)
假设您使用BoundFields
作为前三列并且您想要处理LinkButton
- 点击事件(而不是RowCommand
的{{1}} :
GridView
如果您使用的是protected void CloseLinkClicked(Object sender, EventArgs e)
{
var closeLink = (Control) sender;
GridViewRow row = (GridViewRow) closeLink.NamingContainer;
string firstCellText = row.Cells[0].Text; // here we are
}
且价值TemplateFields
位于标签中(例如aa
):
LblValue
答案 1 :(得分:3)
使用数据键。更简单:
<asp:GridView ID="GridView1" runat="server" DataKeyNames="SomeValue, AnotherValue" ... >
然后在代码隐藏中,只需获取与该行关联的键:
var rowIndex = 0;
var someValue = GridView1.DataKeys[rowIndex]["SomeValue"] as string;
答案 2 :(得分:0)
您需要为CommandName
标记中的LinkButton
列分配GridView
。从那里你还需要连接OnRowCommand
事件以处理你的Close
命令。
以下是在Add
上使用GridView
命令的示例:
Markup:
<asp:gridview id="ContactsGridView" datasourceid="ContactsSource" allowpaging="true"
autogeneratecolumns="false" onrowcommand="ContactsGridView_RowCommand" runat="server">
<columns>
<asp:buttonfield buttontype="Link" commandname="Add" text="Add"/>
<asp:boundfield datafield="ContactID" headertext="Contact ID"/>
<asp:boundfield datafield="FirstName" headertext="First Name"/>
<asp:boundfield datafield="LastName" headertext="Last Name"/>
</columns>
</asp:gridview>
Code-Behind:
void ContactsGridView_RowCommand(Object sender, GridViewCommandEventArgs e)
{
// If multiple buttons are used in a GridView control, use the
// CommandName property to determine which button was clicked.
if(e.CommandName=="Add")
{
// Convert the row index stored in the CommandArgument
// property to an Integer.
int index = Convert.ToInt32(e.CommandArgument);
// Retrieve the row that contains the button clicked
// by the user from the Rows collection.
GridViewRow row = ContactsGridView.Rows[index];
// Create a new ListItem object for the contact in the row.
ListItem item = new ListItem();
item.Text = Server.HtmlDecode(row.Cells[2].Text) + " " +
Server.HtmlDecode(row.Cells[3].Text);
// If the contact is not already in the ListBox, add the ListItem
// object to the Items collection of the ListBox control.
if (!ContactsListBox.Items.Contains(item))
{
ContactsListBox.Items.Add(item);
}
}
}
答案 3 :(得分:0)
你可以这样做
<asp:GridView ID="grid" runat="server"
AutoGenerateColumns="false" onrowcommand="grid_RowCommand" >
<Columns>
<asp:TemplateField >
<ItemTemplate>
<asp:TextBox ID="txt" runat="server" Text='<%#Eval("xxx")%>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField >
<ItemTemplate>
<asp:LinkButton ID="lnk" CommandArgument=<%# Container.DataItemIndex + 1 %>
CommandName="arg">Click</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
代码
protected void grid_RowCommand(object sender, GridViewCommandEventArgs e)
{
int rowindex = int.Parse(e.CommandArgument.ToString());
((TextBox)(grid.Rows[rowindex].FindControl("txtgvunit"))).Text
}
参考 http://dotnetinbox.blogspot.in/2014/02/get-gridview-row-data-in-c.html