2009-06-03 13 views
3

2つのasp:CommandField列を持つASP.NET GridViewコントロールでは、どちらもSelectコマンドを使用してさまざまなタスクを実行しています。 GridViewCommandEventArgsオブジェクトのCommandNameプロパティをチェックしたときに両方が「選択」を返したときに、OnRowCommandイベントで選択された列を区別するにはどうすればよいですか?ここで2つのaspを持つGridViewコントロール:同じコマンドを使用するコマンド列

は、私のソースコードです:

ASPXページ:背後

<asp:GridView ID="MyGridView" runat="server" AutoGenerateColumns="false" OnRowCommand="MyGridView_OnRowCommand"> 
    <Columns> 
     <asp:CommandField ButtonType="Link" ShowSelectButton="true" SelectText="Click Me!" /> 
     <asp:CommandField ButtonType="Link" ShowSelectButton="true" SelectText="No Click Me!" /> 
    </Columns> 
</asp:GridView> 

コード:

protected void MyGridView_OnRowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    string x = e.CommandName //returns "Select" for both asp:CommandField columns 
} 

答えて

4

代わりにあなたは、あなたが最初にあなたが、e.CommandName

+0

CommandNameプロパティを試して、次のエラーが発生しました: 'System.Web.UI.WebControls.CommandField'型に 'CommandName'という名前のパブリックプロパティがありません –

+0

これを行うために動的に作成する必要があります。 – Eric

+0

私は上記の答えを見てください。 – Eric

0

GridViewCommandEventArgs .CommandArgumentプロパティを使用してください!

+0

CommandArgumentプロパティは、選択された行のインデックスを返します。行内でどのasp:commandfieldが選択されたのか知る必要があります。 –

+0

いいえ、CommandArgumentは指定した引数を返します。したがって、CommandNameは同じで、引数は異なるボタンを持つことができます。これにより、コマンドを発生させるボタンを識別するのに役立ちます。 – Cerebrus

0

まあ基づいて行動を取ることができ、特定のコマンド名を指定して、そこ

<asp:ButtonField ButtonType="Link" Text="Click Me" CommandName="MyCommand1" /> 
<asp:ButtonField ButtonType="Link" Text="No Click Me" CommandName="MyCommand2" /> 

からそれに取り組むことができ、そのようにボタン列を使用しますSELECtをコマンドとして使用する必要がありますか?あなたはそれをより意味のあるものに設定することができます。

第2に、CommandArgumentプロパティを異なる値に設定して、どのオブジェクトがクリックされているかを知ることができます。

+0

私はレコード上でCRUD操作を実行していないので、選択コマンドを使用するのが理にかなっています。どちらのシナリオでも情報クエリが必要です。 –

+0

しかしコマンドは何でもかまいません。それはselect_oneまたはselect_twoたとえば... – CodeRedick

+0

私の質問の目的は、select_oneがクリックされたことを示す方法があるかどうかを判断しようとしています。 –

0

コマンド引数プロパティを使用します。

また、コマンドフィールドでボタンを動的に作成し、commandNameに任意の値を設定することもできます。 gridview_Load

for (int i = 0; i <= GridView1.Rows.Count - 1; i++) { 

    linkbutton btnedit = new linkbutton(); 


    GridView1.Rows(i).Cells(3).Controls.Add(btnedit); 
    //the above is where you want the button to be on the grid 
    btndel.CommandName = "Select2"; 
    btndel.CommandArgument = "whatever you want"; 
} 

Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView1.RowCommand 
    If e.CommandName = "Select1" Then 

     //do stuff 
End Sub 
+0

リンクの手動追加は、このユーザーの状況では過度のものであり、必要のないグリッド項目のセカンダリトラバーサルが必要です。 –

0

あなたが求める答えは簡単かつトリッキーです。私はウェブサイトのプロジェクトでもその問題を抱えていたので、インターネットを数日間サーフィンして、私とあなたが必要としていたものは見つけられませんでした。私はただ一人の問題について考えと時間の実験を行い、最終的には、ボタンがクリックされたコラムを知るための唯一の簡単な方法はGridViewCommandEventArgsCommandName propertyGridViewRowCommand eventであることに気づき

ある日。おそらく、おそらく快適なのは、GridViewの列をデザインモードで編集し、コマンドフィールドをボタンフィールドに置き換えることです。

CommandNameの各ボタンフィールドに任意のstring/textを割り当てることができます。RowCommandイベントでは、クリックされたイベントを知ることができます。 Button1またはButton2ていますが、ボタンを選択して、あなたに与える必要があります何かを要求するので、あなたは、これらの文字列を与えたくないので、CommandNameは言葉を選択する必要がありますが、それはあまりにもとを選択することができは多くの形態でCommandNameで言及することができ

selectコマンドを選択する選択して、まだシステムがそれを認識します。あなたはその最初のCommandName単にあるを選択し、他のを選択あるGridViewで2つのボタンフィールドを、持っている場合は、それらのいずれかがクリックされたときに、たとえば、その後、RowCommandイベントが上がり、

if (e.CommandName == "select") 
    { 
    Label1.Text = "You clicked first button"; 
    } 
    else 
    { 
    Label1.Text = "You clicked second button"; 
    } 

GridViewSelectedDataKeyには、リクエストしたデータが含まれます。他にどのようなどちらかselect_oneがクリックされたかどうかを知るために、あなたを助けたり、他ますselect_oneにボタン1を設定し、select_twoにボタン2を設定することにより、CommandNameが異なるために彼らの答えで提供される人々が、あなたのGridViewSelectedDataKeyはdoesnのことnullまたはDataKeyインスタンスのままになりますあなたが必要とする情報はまったく含まれていません。

言い換えれば、ボタンは必要な情報を選択しないので、私のの回答に従うことが非常に重要です。それはあなたの問題に対する正確で、完璧で素晴らしいソリューションです!

関連する問題