تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
استفسار عن الـ CommandArguments + DataKeys
#3
سأكتب هنا ماتم التوصل اليه Big Grin
مع مثال


GridView والحدث RowCommand


يحدث الحدث RowCommand عندما ننقر على زر ButtonField داخل الجريدفيو

(أي ينفذ مانريد تنفيذه عند النقر على الزر )

الزر داخل الجريد فيو يمكن ان ينجز بعض المهام

ولهذا الزر خاصيتان مهمتان هما :

CommandName

CommandArgument قيمتها الافتراضية : رقم (index) للسطر الحالي .

وحتى نستطيع استخدام هاتين الخاصتين يجب ان نمرر الكائن (e) المأخوذ من الكلاس (GridViewCommandEventArgs) كوسيط الى معالج الحدث RowCommand

"حيث هذه الكلاس تزود الحدث السابق بالمعطيات فهي تحدد مصدر الامر ووسائط الحدث وتحدد رقم السطر"

الزر داخل الجريدفيو له استخدامات عدة , وعادة مايتم استخدامه من أجل المهام التالية (على ان يوضع اسم المهمة ضمن الـخاصية CommandName ) والمهام هي:

Edit : تضع السجل الحالي بوضع التحرير وتطلق الحدث RowEditing

Cancel : تلغي عملية التحرير السابقة وتعيد الجريد فيو لوضع القراءة

Delete : تحذف السجل الحالي وتطلق الحدث RowDeleting , RowDeleted

Page : جعل الجريد فيو تعرض بصفحات Paging وهنا نضع في الخاصية CommandArgument

"التالي" و " السابق" وهكذا .. أو بشكل أرقام تشير لرقم الصفحة , وهنا يتم اطلاق حدث

PageIndexChenging


[ATTACH=CONFIG]744[/ATTACH]


Sort : ترتيب اسطر الجريدفيو , وتطلق الحدثين Sorting , Sorted وهنا يمكن ان نستخدم الخاصية CommandArgument

لتحديد اتجاه الترتيب تنازلي أو تصاعدي حيث نعطيها يدويا احدى القيمتين

Ascending أو Descending

Update : تحديث السجل الحالي في قاعدة البيانات (وليس فقط بالجريدفيو) وهنا ينطلق الحدثين RowUpdating , RowUpdated .

لتحديد رقم السطر الذي أطلق الحدث RowCommand نستخدم الخاصية CommandArgument التابعة

للكائن e المشتق من (GridViewCommandEventArgs) الذي قمنا بوضعه مسبقا كوسيط للحدث . حيث تحوي هذه الخاصية رقم السطر


مثال


كود :
[align=left]void ContactsGridView_RowCommand(Object sender, GridViewCommandEventArgs e)
  {    
    if(e.CommandName=="Add")
    {
      // Convert the row index stored in the CommandArgument

      // property to an Integer.

      int index = Convert.ToInt32(e.CommandArgument);

      // Retrieve the row that contains the button clicked

      // by the user from the Rows collection.

      GridViewRow row = ContactsGridView.Rows[index];
      ……….. [/align]
[SIZE=6]مثال :


(عند النقر على الزر Add داخل الجريدفيو يقوم باضافة السطر الحالي الى الـ ListBox )

لنقوم الان بانشاء جريدفيو و ListBox بصفحة التصميم

نذهب لصفحة الـ Html

ونضيف للجريد فيو ButtonField ونسميه Add أو اضافة

ونضيف لهذا الزر الخاصية CommandName="Add"

بالشكل التالي

كود :
<asp:ButtonField CommandName="Add" Text="Add" />



ليصبح كود الجريدفيو كامل كالتالي :



كود :
[COLOR="#0000FF"][align=left]
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"

            DataKeyNames="id" DataSourceID="SqlDataSource1" Width="97%"

[COLOR="#FF0000"]

            onrowcommand="GridView1_RowCommand"> [/COLOR]

  <Columns>

<asp:BoundField DataField="id" HeaderText="id" InsertVisible="False" ReadOnly="True" SortExpression="id" />


<asp:BoundField DataField="name" HeaderText="name" SortExpression="name" />


<asp:BoundField DataField="city" HeaderText="city" SortExpression="city" />


<asp:BoundField DataField="mob" HeaderText="mob" SortExression="mob" />


[color=#FF0000]<asp:ButtonField CommandName="Add" Text="Add" />[/color]


   </Columns>


</asp:GridView>[/align][/COLOR]


[ATTACH=CONFIG]743[/ATTACH]


نحدد الجريدفيو ونذهب الى خصائصها في الـ Properties
نحدد Events بدلا من الخصائص

ونضغط دبل كليك على الحدث RowCommand

لنجعل هذا الحدث ينفذ المهمة المطلوبة من النقر على الزر Add والتي هي هنا اضافة السطر الحالي الى ListBox

اذاً نكتب به الكود التالي :


كود :
[SIZE=6][COLOR="#0000FF"]
[align=left]
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)

    {
        
        if (e.CommandName == "Add")

        {

            int index = Convert.ToInt32(e.CommandArgument);

            
            GridViewRow row = GridView1.Rows[index];


            ListItem item = new ListItem();      

                                                            
item.Text= "name: " + Server.HtmlDecode( row.Cells[1].Text) + "-  city:

" + Server.HtmlDecode(row.Cells[2].Text) +"-


mob:  " + Server.HtmlDecode(row.Cells[3].Text);


            if (!ListBox1.Items.Contains(item))

            {

                ListBox1.Items.Add(item);
            
       }

}[/align][/COLOR][/SIZE]


[/SIZE]


الملفات المرفقة صورة/صور
       
الرد }}}
تم الشكر بواسطة:


الردود في هذا الموضوع
استفسار عن الـ CommandArguments + DataKeys - بواسطة AbaAlHaitham - 06-10-12, 04:15 AM


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم