2011-07-08 81 views
1

我有一個從存儲過程中拉取數據的gridview。在列標題中,我使用了Linkbutton。我想獲取Ctl ID並在點擊它時將其存儲在變量中。我不確定發生了什麼,但是我收到了一些字符串。下面是我的代碼,這和我以前的帖子很相似。如何從linkbutton抓取Ctl

ASP.NET

<asp:TemplateField HeaderText="ID"> 
      <ItemTemplate> 
      <asp:LinkButton ID="lnkID" runat="server" OnClick="lblClick1" 
      Text='<%#Eval("ID") %>'> 
      </asp:LinkButton> 
      </ItemTemplate> 
      </asp:TemplateField> 

C#:

​​

有人可以幫助我起牀和運行。謝謝。

回答

2

你可以使用一個隱藏字段來存儲ID:

<ItemTemplate> 
    <asp:HiddenField 
     runat="server" 
     ID="ID" 
     Value='<%# Eval("ID") %>' 
    /> 

    <asp:LinkButton 
     runat="server" 
     OnClick="LabelClick" 
     Text="click me" 
    /> 
</ItemTemplate> 

然後:

protected void LabelClick(object sender, EventArgs e) 
{ 
    var hiddenField = (HiddenField)((Control)sender).FindControl("ID"); 
    var id = hiddenField.Value; 
    // Do something with the id   
} 

UPDATE:

全部工作示例:

<%@ Page Language="C#" %> 
<script type="text/c#" runat="server"> 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      grid.DataSource = Enumerable.Range(1, 10).Select(x => new 
      { 
       ID = x 
      }); 
      grid.DataBind(); 
     } 
    } 

    protected void LabelClick(object sender, EventArgs e) 
    { 
     var hiddenField = (HiddenField)((Control)sender).FindControl("ID"); 
     result.Text = string.Format("selected id: {0}", hiddenField.Value); 
    } 
</script> 

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
</head> 
<body> 
    <form id="Form1" runat="server"> 
     <asp:GridView ID="grid" runat="server" AutoGenerateColumns="false"> 
      <Columns> 
       <asp:TemplateField HeaderText="ID"> 
       <ItemTemplate> 
        <asp:HiddenField 
         runat="server" 
         ID="ID" 
         Value='<%#Eval("ID") %>' 
        /> 
        <asp:LinkButton 
         runat="server" 
         OnClick="LabelClick" 
         Text="click me" 
        /> 
       </ItemTemplate> 
       </asp:TemplateField> 
      </Columns> 
     </asp:GridView> 

     <asp:Label ID="result" runat="server" /> 
    </form> 
</body> 
</html> 
+0

我得到這個錯誤「對象引用。 – jpavlov

+0

來自此代碼: – jpavlov

+0

第29行://使用SelectedRow屬性獲取當前選定的行。 第30行:GridViewRow row = gv2.SelectedRow; 第31行:string controlId =((LinkBut​​ton)row.FindControl(「ID」))。 第32行:lblshow.Text = controlId; – jpavlov

0

在onclick方法lblClick1你可以使用:運行時,它不設置到對象的實例

public void lblClick1(object sender, CommandEventArgs e) 
{ 
    int controlId = Convert.ToInt32(e.CommandArgument); //get ID and store it in controlId 
    lblshow.Text = controlId; 
}