ورود / ثبت نام
0
0

CommandName و CommandArgument چگونه کار می کنند

242 بازدید
CommandName

CommandName

در این مقاله نشان می دهیم که چگونه سطر گرید ویو، Button،LinkButton یا ImageButton ای که کلیک شده است را در رویدادهای OnClick و OnRowCommand مربوط به آن تشخیص دهیم. زمانی که یک Button، LinkButton یا ImageButton مشخص شد، به راحتی می توانیم ID، CommandName و CommandArgument آن را به دست بیاوریم.

CommandName

به دست آوردن GridView Row و Row Index در رویداد RowCommand

در زیر یک کنترل GridView با ButtonField و یک رویداد OnRowCommand داریم.

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns = "false" 
    OnRowCommand = "OnRowCommand">
 <Columns>
  <asp:ButtonField CommandName = "ButtonField"  DataTextField = "CustomerID"
        ButtonType = "Button"/>
 </Columns>
</asp:GridView>

حال اگر یکی از Buttonها کلیک شود، رویداد OnRowCommand اجرا می شود.

سی شارپ

protected void OnRowCommand(object sender, GridViewCommandEventArgs e)
{
    int index = Convert.ToInt32(e.CommandArgument);
    GridViewRow gvRow = GridView1.Rows[index]; 
}

VB.Net

Protected Sub OnRowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs)
    Dim index As Integer = Convert.ToInt32(e.CommandArgument)
    Dim gvRow As GridViewRow = GridView1.Rows(index)
End Sub

RowIndex مربوط به سطر GridView در property با نام CommandArgument نگه داری می شود. بنابراین با این اندیس می توانید رفرنس سطر GridView را دریافت نمایید.

به دست آوردن GridView Row و Row Index در رویداد کلیک Button در TemplateField

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns = "false">
    <Columns>
        <asp:TemplateField>
        <ItemTemplate>
           <asp:Button ID="Button1" runat="server" Text='<%#Eval("CustomerID")%>'
                  CommandArgument = "Button1"  OnClick = "Button1_Click" />
        </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

زمانی که Button کلیک می شود، رویداد کلیک اجرا می شود.

سی شارپ

protected void Button1_Click(object sender, EventArgs e)
{
    GridViewRow gvRow = (GridViewRow)(sender as Control).Parent.Parent;
    int index = gvRow.RowIndex;
}

VB.Net

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs)
    Dim gvRow As GridViewRow = CType(CType(sender, Control).Parent.Parent, _
                                        GridViewRow)
    Dim index As Integer = gvRow.RowIndex
End Sub

توجه داشته باشید که در این جا، sender را برای به دست آوردن GridView Row تبدیل (cast)کردیم. Sender یک کنترل Button است، بنابراین والد یک کنترل Button، Cell می باشد و والد Cell خود GridView Row می باشد.

Button ——->GridView Cell ——->GridView Row

همین کار را برای LinkButton و ImageButton نیز انجام می دهیم.

به دست آوردن CommandArgument در رویداد کلیک Button در TemplateField

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns = "false">
    <Columns>
        <asp:TemplateField>
        <ItemTemplate>
           <asp:Button ID="Button1" runat="server" Text='<%#Eval("CustomerID")%>'
                  CommandArgument = "Button1"  OnClick = "Button1_Click" />
        </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

در بسیاری از مواقع، ما به property های یک Button مانند CommandName و CommandArgument نیاز داریم. بنابراین باید رفرنس آن را از طریق پارامتر sender به دست آوریم.

سی شارپ

protected void Button1_Click(object sender, EventArgs e)
{
    Button btn = (Button)sender;
    string CommandName = btn.CommandName;
    string CommandArgument = btn.CommandArgument;
}

VB.Net

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs)
   Dim btn As Button = CType(sender, Button)
   Dim CommandName As String = btn.CommandName
   Dim CommandArgument As String = btn.CommandArgument
End Sub

همین کار را می توان با ایجاد یک شی و تخصیص sender به آن البته بعد از casting، برای LinkButton و ImageButtonنیز انجام داد.

چندین مقدار در CommandArgument

در حال حاضر، به طور پیش فرض هیچ propertyای برای آن وجود ندارد و ما باید از یک رشته الحاق شده استفاده کرده و سپس آن را به آرایه ای split کنیم. GridView زیر را در نظر بگیرید:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns = "false">
    <Columns>
        <asp:TemplateField>
        <ItemTemplate>
         <asp:Button ID="Button1" runat="server" Text='<%#Eval("CustomerID")%>'
          CommandArgument=
          '<%#Eval("PostalCode") + "," + Eval("City") + "," + Eval("Country") %>' 
              OnClick = "Button1_Click" />
        </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

حال برای به دست آوردن این مقادیر، باید به صورت زیر عمل کنیم:

سی شارپ

protected void Button1_Click(object sender, EventArgs e)
{
    Button btn = (Button)sender;
    string[] CommandArgument = btn.CommandArgument.Split(',');
    string CommandArgument1 = CommandArgument[0];
    string CommandArgument2 = CommandArgument[1];
    string CommandArgument3 = CommandArgument[2];
}

VB.Net

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs)
   Dim btn As Button = CType(sender, Button)
   Dim CommandName As String = btn.CommandName
   Dim CommandArgument As String() = btn.CommandArgument.Split(",")
   Dim CommandArgument1 As String = CommandArgument(0)
   Dim CommandArgument2 As String = CommandArgument(1)
   Dim CommandArgument3 As String = CommandArgument(2)
End Sub

همانطور که مشاهده می کنید ما به سادگی مقادیر را بر اساس جداکننده (در این جا کاما)، split کرده و آرایه ای از رشته ها ایجاد نمودیم.

موفق باشید !

  • پسورد: www.mspsoft.com
آیا این مطلب را می پسندید؟
https://www.mspsoft.com/?p=18441
اشتراک گذاری:
واتساپتوییترفیسبوکپینترستلینکدین
داریوش فرخی
داریوش فرخی هستم از سال 92 شروع به یادگیری برنامه نویسی و از سال 93 در بخش برنامه نویسی و تولید محتوای سایت mspsoft.com مشغول هستم. فعالیتم نیز بیشتر در زمینه های برنامه نویسی با سی شارپ و asp.net بوده است. اوقات فراغتم را هم غالبا با تماشای فیلم یا بازی های کامپیوتری پر میکنم .
مطالب بیشتر
برچسب ها:

نظرات

0 نظر در مورد CommandName و CommandArgument چگونه کار می کنند

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

هیچ دیدگاهی نوشته نشده است.