質問

私は複数の行とGridViewコントロールを持って、それぞれの更新]ボタンを持って、私はときUpdate]ボタンを誰かがクリックする2つの値を渡す必要があります。 別にCommandArgument内部の引数を梱包から(古風でエレガントではない)コンマで区切って、どのように私はより多くの1つの引数より渡すのでしょうか?

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

私は現在、任意のデザイン・ソリューションを求めているわけではないので、注意点として、値は、ページ上の任意のコントロールから取得することはできません。

役に立ちましたか?

解決

ケルシーが正しいかのようにそれチャンスをうかがった後、

は見えます。

ただ、コンマか何かを使用して、あなたがそれを消費したいときにそれを分割します。

他のヒント

あなたはセミコロンを渡すことができますが、文字列を分割し、それを使用し、コマンドの引数として値を分離します。

<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");
}

希望それが!!!!

のに役立ちます

@パトリックの答えは良いアイデアであり、より信用に値します!あなたが望むように、これらは全て分離されている多くのデータ項目として持つことができ、必要に応じて使用するクライアント側することができます。

また、むしろコードに比べて、宣言を添加することができます。

:私はちょうどこのようにGridViewのためにこれをしませんでした
<asp:TemplateField HeaderText="Remind">
  <ItemTemplate>
    <asp:ImageButton ID="btnEmail"  
        data-rider-name="<%# ((Result)((GridViewRow) Container).DataItem).Rider %>"
        data-rider-email="<%# ((Result)((GridViewRow) Container).DataItem).RiderEmail %>"
        CommandName="Email" runat="server" ImageAlign="AbsMiddle" ImageUrl="~/images/email.gif" />
  </ItemTemplate> 
</asp:TemplateField>

RowCommandでは、あなたがこれを行う:

void gvMyView_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "Email")
    {
        var btnSender = (ImageButton)e.CommandSource;
        var riderName = btnSender.Attributes["data-rider-name"];
        var riderEmail = btnSender.Attributes["data-rider-email"];
        // Do something here
    }
}

の区切り文字と一緒にすべての値をハッキングし、最後に再び開梱よりもそんなにきれいます。

Doが、それが改ざんされていた場合には、そのページから取り戻す任意のデータをきれいに/テストすることを忘れないで!

私のアプローチは、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();

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

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

GridViewのをdatakeysコレクションに保存したり、同じセル内に隠されたフィールドに格納し、または一緒に値を結合するのどちらか。それは唯一の方法です。あなたは一つのリンクで2つの値を格納することはできません。

あなたが渡したい場合は、を二つの値を、あなたがこのアプローチを使用することができます。

<asp:LinkButton ID="RemoveFroRole" Text="Remove From Role" runat="server"
CommandName='<%# Eval("UserName") %>' CommandArgument='<%# Eval("RoleName") %>'
 OnClick="RemoveFromRole_Click" />

基本的に、私はキー値として{CommmandName、CommandArgument}を処理しています。データベースフィールドからの両方を設定してください。あなたは、私がもっときれいなコードだと思うこの場合、中のOnClickイベントと使用OnCommandイベントを使用する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top