2012-05-05 39 views
0

我有一個ASP:網格有一個鏈接按鈕,我需要一些如何引用它後面的代碼當它被點擊,但我在語法上掙扎如何引用鏈接按鈕時,它內部的一個asp:網格當它被點擊

繼承人我的ASP:網格我需要在後面的代碼中執行代碼時,該鏈接按鈕'重新採取'被按下,也能夠知道它被點擊的行,因爲我將需要引用用戶的電子郵件和命名並提供相關信息發送一封電子郵件....

<asp:GridView ID="GrdViewUsers" runat="server" AutoGenerateColumns="false" GridLines="None" 
        EnableViewState="false" class="tablesorter"> 
    <AlternatingRowStyle></AlternatingRowStyle> 
    <Columns> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <asp:LinkButton Text="Re-Take" runat="server" ID="Edit" CommandName="Edit"></asp:LinkButton> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Full Name"> 
      <ItemTemplate> 
       <asp:HyperLink ID="HyperFullName" CssClass="gvItem" runat="server" NavigateUrl='<%#Eval("UserID","/ExamPaper.aspx?uid={0}") %>' 
        Text='<%# DataBinder.Eval(Container,"DataItem.FullName") %>'></asp:HyperLink> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Email"> 
      <ItemTemplate> 
       <asp:Label ID="lblSurname" CssClass="gvItem" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Email") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Exam Taken"> 
      <ItemTemplate> 
       <asp:Label ID="lblUsername" CssClass="gvItem" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.ExamTaken") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Date Taken"> 
      <ItemTemplate> 
       <asp:Label ID="lblUsername" CssClass="gvItem" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.DateTaken") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Exam Total"> 
      <ItemTemplate> 
       <asp:Label ID="lblUsername" CssClass="gvItem" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.ExamTotal") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

如果有人能幫助我的一個片段,我將非常感激

+0

與引用鏈接的點擊事件不只是幫助按鈕我已經完成了電子郵件等的代碼 –

回答

0

FindControl應該在這種情況下工作。

protected void GrdViewUsers_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if(e.Row.RowType == DataControlRowType.DataRow) 
    { 
     HyperLink myHyperLink = e.Row.FindControl("Edit") as HyperLink; 
    } 
} 
+0

嗨,謝謝你的代碼片斷,是不是有一個cli ck事件與您如何爲按鈕執行正常的點擊事件相似? –

1

你可能會略有不同。你會發現,當一個控件放在gridview中時,從該控件引發的任何事件都會引發GridView上的RowCommand。

爲了得到你想要的東西,你可以添加CommandName和CommandArgument到你的LinkBut​​ton,然後在GridView的RowCommand中捕獲它。

<asp:LinkButton id="LinkButton1" runat="server" commandName="LinkButtonClicked" commandArgument='Eval("myObjectID")' /> 

其中myObjectID是您將網格綁定到的對象的ID列的名稱。

然後

void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    if (e.CommandName == "LinkButtonClicked") 
    { 
     string id = e.CommandArgument; // this is the ID of the clicked item 
    } 
} 

見:ASP.net GridView: get LinkItem's row

0

假設電網已LinkBut​​ton的上,我們希望得到的行索引

<asp:LinkButton ID="lnkbtnAdd " runat="server" CommandName="cmdAdd" ImageUrl="~/Images/add.gif" ></asp:LinkButton> 

在後面的代碼,在OnRowCreated情況下,我們附上行號柵格到行的每個按鈕以在RowCommand事件中單擊時返回它

protected void gvListing_RowCreated(object sender, GridViewRowEventArgs e) 
    {   
     if (e.Row.RowType == DataControlRowType.DataRow) 
     {     
      System.Web.UI.WebControls.LinkButton lnkbtnAdd = new System.Web.UI.WebControls.LinkButton();  
       lnkbtnAdd = (System.Web.UI.WebControls.LinkButton)e.Row.FindControl("lnkbtnAdd");      
       if (lnkbtnAdd != null) 
        lnkbtnAdd .CommandArgument = e.Row.RowIndex.ToString(); 
     }   
    } 

在RowCommand事件,我們將回到當前行的索引,並設置網格的選擇指數

protected void gvListing_RowCommand(object sender, GridViewCommandEventArgs e) 
{  
    if (e.CommandName.ToString() == "cmdAdd") 
    { 
     int RowIndex = int.Parse(e.CommandArgument.ToString());// Current row 

    } 
} 
0

首先:你有重複的ID在你的模板列一樣lblUsername什麼是不允許的,因爲它是相同的NamingContainer

您可以通過RowIndexCommandArgumentRowCommand

在ASPX:

<asp:TemplateField> 
    <ItemTemplate> 
     <asp:LinkButton 
      Text="Re-Take" 
      runat="server" 
      ID="Edit" 
      CommandName="Edit" 
      CommandArgument="<%# ((GridViewRow) Container).RowIndex %>"> 
     </asp:LinkButton> 
    </ItemTemplate> 
</asp:TemplateField> 

處理GridView的RowCommand

void GrdViewUsers_RowCommand(Object sender, GridViewCommandEventArgs e) 
    { 
    if(e.CommandName=="Edit") 
    { 
     int index = Convert.ToInt32(e.CommandArgument);  
     GridViewRow row = GrdViewUsers.Rows[index]; 
     // now you can get all of your controls like: 
     Label lblSurname = (Label)row.FindControl("lblSurname"); 
     String email = lblSurname.Text // you noticed that DataItem.Email is bound to lblSurname? 
    } 
    } 
+0

iv完成了上述操作,但是當我點擊鏈接按鈕時,該頁面只是閃爍,並沒有進入後面的grdviewuser_rowcommand代碼? –

+0

Iv add onrowcommand =「GrdViewUsers_RowCommand在asp:grid然後我添加CommandArgument =」<%#((GridViewRow)容器).RowIndex%>「> 我需要改變任何東西?因爲我不是100%肯定,然後我在後面的代碼中添加了GridViews的RowCommand代碼片段,當我運行並在代碼中放置了一個斷點時,沒有任何東西碰到頁面只是刷新........ –

+0

@ScottAtkinson:它應該工作,如果你已經添加GridView標記上的rowcommand處理函數(就像你上面所說的那樣)。你是否在頁面加載數據綁定的GridView上回發?你應該這樣做,只有當!Page.IsPostback'。 –

相關問題