32

複数の行を持つグリッドビューがあり、それぞれに [更新] ボタンがあり、誰かが [更新] ボタンをクリックしたときに 2 つの値を渡す必要があります。CommandArgument 内にコンマで区切られた引数をパックする (古風でエレガントではない) 以外に、複数の引数を渡すにはどうすればよいでしょうか?

<asp:LinkButton ID="UpdateButton" runat="server" CommandName="UpdateRow" CommandArgument="arg_value" Text="Update and Insert" OnCommand="CommandButton_Click" ></asp:LinkButton>

注意として、値はページ上のどのコントロールからも取得できないため、現在、設計ソリューションを探していません。

4

7 に答える 7

80

セミコロンで区切られた値をコマンド引数として渡し、文字列を分割して使用できます。

<asp:TemplateField ShowHeader="false">
    <ItemTemplate>
       <asp:LinkButton ID="lnkCustomize" Text="Customize"  CommandName="Customize"  CommandArgument='<%#Eval("IdTemplate") + ";" +Eval("EntityId")%>'  runat="server"> 
       </asp:LinkButton>   
    </ItemTemplate>   
</asp:TemplateField>

サーバー側で

protected void gridview_RowCommand(object sender, GridViewCommandEventArgs e)
{
      string[] arg = new string[2];
      arg = e.CommandArgument.ToString().Split(';');
      Session["IdTemplate"] = arg[0];
      Session["IdEntity"] = arg[1];
      Response.Redirect("Samplepage.aspx");
}

それが役に立てば幸い!!!!

于 2011-07-01T14:44:06.527 に答える
15

ざっと調べてみると、ケルシーが正しいようです。

コンマなどを使用して、消費したいときに分割してください。

于 2010-03-05T19:56:34.543 に答える
8

私のアプローチは、属性コレクションを使用して、コード ビハインドから HTML データ属性を追加することです。これは、jquery およびクライアント側のスクリプト作成とより一致しています。

// This would likely be done with findControl in your grid OnItemCreated handler
LinkButton targetBtn = new LinkButton();


// Add attributes
targetBtn.Attributes.Add("data-{your data name here}", value.ToString() );
targetBtn.Attributes.Add("data-{your data name 2 here}", value2.ToString() );

次に、属性コレクションから値を取得します

string val = targetBtn.Attributes["data-{your data name here}"].ToString();
于 2013-03-25T15:16:26.470 に答える
4

上記のコメントに同じことを追加するもう少しエレガントな方法..

<asp:GridView ID="grdParent" runat="server" BackColor="White" BorderColor="#DEDFDE"
                           AutoGenerateColumns="false"
                            OnRowDeleting="deleteRow"
                         GridLines="Vertical">
      <asp:BoundField DataField="IdTemplate" HeaderText="IdTemplate" />
      <asp:BoundField DataField="EntityId" HeaderText="EntityId"  />
    <asp:TemplateField ShowHeader="false">
        <ItemTemplate>
           <asp:LinkButton ID="lnkCustomize" Text="Delete"  CommandName="Delete"  CommandArgument='<%#Eval("IdTemplate") + ";" +Eval("EntityId")%>'  runat="server"> 
           </asp:LinkButton>   
        </ItemTemplate>   
    </asp:TemplateField>
     </asp:GridView>

そしてサーバー側では:

protected void deleteRow(object sender, GridViewDeleteEventArgs e)
{
    string IdTemplate= e.Values["IdTemplate"].ToString();
    string EntityId = e.Values["EntityId"].ToString();

   // Do stuff..
}
于 2012-01-09T06:28:20.583 に答える
1

gridview datakeys コレクションに格納するか、同じセル内の隠しフィールドに格納するか、値を結合します。それが唯一の方法です。1 つのリンクに 2 つの値を格納することはできません。

于 2010-03-05T19:17:37.443 に答える