0

リンクボタンのあるASP:gridがあります。クリックしたときにコードビハインドでそれを参照する方法が必要ですが、構文に苦労しています

Heres my ASP:Grid リンク ボタン 'Re-Take' が押されたときにコード ビハインドでコードを実行する必要があり、ユーザーの電子メールと名前を参照する必要があるため、クリックされた行を知ることもできます。関連情報を記載したメールを送信してください....

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

誰かがスニペットで私を助けることができれば、私はそれを高く評価します

4

4 に答える 4

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: LinkItem の行を取得する

于 2012-05-05T13:59:06.493 に答える
0

lblUsername最初: TemplateFields に同じ IDが許可されていないように繰り返し ID がありますNamingContainer

RowIndexasCommandArgumentを に渡すことができますRowCommand:

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?
    }
  }  
于 2012-05-05T14:11:31.107 に答える
0

FindControlこの場合は機能するはずです。

protected void GrdViewUsers_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if(e.Row.RowType == DataControlRowType.DataRow)
    {
        HyperLink myHyperLink = e.Row.FindControl("Edit") as HyperLink;
    }
}
于 2012-05-05T13:53:42.230 に答える
0

行インデックスを取得したいリンクボタンがグリッドにあるとします。

 <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

   }
}
于 2012-05-05T13:59:35.977 に答える