当按钮单击行时在 C# Gridview 中获取单元格值

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/17366134/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-10 09:18:27  来源:igfitidea点击:

Get Cell Value in C# Gridview when Button clicked on row

c#asp.netgridview

提问by Apollo

I have a gridviewMain. Whenever I click the CLOSE linkbutton for row 1 I want to get the value aa. Click Close on row 2 get the value of bb. Any ideas.

我有一个 gridviewMain。每当我单击第 1 行的 CLOSE 链接按钮时,我都想获得值 aa。单击第 2 行的关闭获取 bb 的值。有任何想法吗。

A    B   C  
aa  xx   3  CLOSE 
bb  yy   4  CLOSE
cc  zz   5  CLOSE

aspx

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>

采纳答案by Tim Schmelter

Asssuming that you are using BoundFieldsfor the first three columns and you want to handle the LinkButton-click event (instead of the e.g. RowCommandof the GridView):

假设您使用BoundFields的是前三列,并且您想要处理LinkButton-click 事件(而不是例如RowCommandGridView):

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
}

If you are using TemplateFieldsand the value aais in a Label (e.g. LblValue):

如果您正在使用TemplateFields并且该值aa在标签中(例如LblValue):

Label lblValue = (Label) row.FindControl("LblValue"); // lblValue.Text = "aa"

回答by Karl Anderson

You need to assign a CommandNameto your LinkButtoncolumn in the GridViewmarkup. From there you will also need to wire up the OnRowCommandevent to handle your Closecommand.

您需要在标记中CommandName为您的LinkButton列分配一个GridView。从那里你还需要连接OnRowCommand事件来处理你的Close命令。

Here is an example of using an Addcommand on a GridView:

以下是Add在 a上使用命令的示例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);
        }
    }
}

回答by James Johnson

Use data keys for this. Much simpler:

为此使用数据键。更简单:

<asp:GridView ID="GridView1" runat="server" DataKeyNames="SomeValue, AnotherValue" ... >

And then in code-behind, just get the keys associated with the row:

然后在代码隐藏中,只需获取与该行关联的键:

var rowIndex = 0;
var someValue = GridView1.DataKeys[rowIndex]["SomeValue"] as string;

回答by balaji

You can get like this

你可以这样

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

Code

代码

 protected void grid_RowCommand(object sender, GridViewCommandEventArgs e)
{
int rowindex = int.Parse(e.CommandArgument.ToString());
((TextBox)(grid.Rows[rowindex].FindControl("txtgvunit"))).Text
} 

Ref http://dotnetinbox.blogspot.in/2014/02/get-gridview-row-data-in-c.html

参考 http://dotnetinbox.blogspot.in/2014/02/get-gridview-row-data-in-c.html