تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
استفسار عن الـ CommandArguments + DataKeys
#1
السلام عليكم
من خلال تعرضي للـ GridView
كان هناك مثال بالمنتدى القديم حول نقل قيمة من صفحة لأخرى , وكان المثال فيه CommandArguments + DataKeys+DataKeyNames
اتمنى لو احصل على فكرة نظرية ولو بسيطة عن هذه المصطلحات الثلاث (شو معناتهم , ومتى استخدمهم)
لم استطع فهم هذه المصطلحات من المراجع الانكليزية , أو الاحرى لم اجد مرجع يشرحها من البداية ,
الرد }}}}
تم الشكر بواسطة:
#2
أضف اليها حدث الـ RowCommand ـ
هو سبب مشكلتي مع هذه المصطلحات


Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView1.RowCommand
Dim itm As Integer
itm = Convert.ToInt32(e.CommandArgument)
Response.Redirect("Default2.aspx?ID=" & GridView1.DataKeys(itm).Value.ToString())
End Sub
الرد }}}}
تم الشكر بواسطة:
#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]


الملفات المرفقة صورة/صور
       
الرد }}}}
تم الشكر بواسطة:
#4
المثال هنا


[COLOR="#0000FF"]
[ATTACH]742[/ATTACH] [/COLOR]


الملفات المرفقة
.rar   GridView_RowCommand.rar (الحجم : 127.92 ك ب / التحميلات : 23)
الرد }}}}
تم الشكر بواسطة:
#5
اعذرني اخي لم اقرا كامل الموضوع لكن شدتني جزئية نقل قيمة .. ارجو ان مرادك متوفر بالرابط التالي:
http://vb4arb.com/vb/showthread.php?96-%...1%D8%D1%DE
أستودعكم الله الذي لا تضيع ودائعه أرجو ان تجدوا بمشاركاتي ما يجعلكم تدعون لي بخير ان تحتم غيابي.
الرد }}}}
تم الشكر بواسطة:
#6
أشكرك أخي سعود وموضوع مفيد جدا (عرض العناوين والتفاصيل )
وسأدرسه بالتفصيل ان شاء الله فالافكار مرتني من قبل, بارك الله فيك
أما موضوع نقل قيمة بالكويري سترنج فأنا لا أسأل عنه ولكن كان سؤالي حول المصطلحات التي كتبتها هل لها علاقة بنقل القيم بين الصفحات ..
ولكن تبين انه ليس لها علاقة , مجرد توهم فقط .

ثم بالتعليقات الاخرى كتبت كيفية استعمال بعض هذه المصطلحات .



بقي الان الـ DataKeys أو الـ DataKeyNames

شو شغلتهم ؟؟
الرد }}}}
تم الشكر بواسطة:
#7



DataKey

تمثل قيمة المفتاح الرئيسي PrimaryKey لمصدر البيانات

يمكن الحصول عليه بالطريقة

Datakey k1=GridView1.DataKeys[0];


ان خاصية الـ DataKeyNames تحمل اسم حقل المقتاح الرئيسي

مثلا : IdCustomer

فمثلا

لدينا صفحتين الاولى بها GridView تعرض عناوين الاخبار والثانية بها DetailsView تعرض التفاصيل

لو اردنا الحصول على قيمة المفتاح الرئيسي

عند عرض التفاصيل بالـ DetailsView

أولا يجب ان تكون الخاصية DataKeyNames في الجريدفيو (بالصفحة الاولى ) تحمل اسم

الحقل الرئيسي بجدول البيانات

وفي DetailsView نستخدم الحدث DataBound كالتالي


كود :
[align=left]
[COLOR="#0000CD"]
[SIZE=6]protected void DetailsView1_DataBound(object sender, EventArgs e)

    {

        DataKey k1 = DetailsView1.DataKey;

        Label1.Text = "the key is: " + k1.Value.ToString();

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



حيث حدث DataBound يحدث عند جلب البيانات من المصدر (قاعدة البيانات)
الرد }}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [سؤال] استفسار عن رفع موقع على 1and1 company الراجية عفو ربها 3 196 22-08-16, 08:56 AM
آخر رد: أبو عمر
  استفسار عن ربط Dropdown lists nin9e 3 548 23-05-15, 12:05 PM
آخر رد: nin9e
  استفسار حول الخادم المحلي local host رضو 3 1,261 15-02-14, 11:49 AM
آخر رد: رضو
  استفسار حول تحويل برنامج مصمم بفيجوال بيسك الي ويب سايت مبرمج أوتار 6 2,288 24-08-13, 06:50 AM
آخر رد: مبرمج أوتار
  استفسار بخصوص طريقة الاتصال لمشروع dena 3 628 03-07-13, 12:01 AM
آخر رد: dena
  استفسار في طريقة عمل (اقراء المزيد ) مالكـ 9 1,100 09-05-13, 10:31 PM
آخر رد: مالكـ
  [استفسار] : كيفية عمل تسجيل دخول عن طريق اكثر من حاسبة ولاكثر من شخص مبرمج بلا حدود 0 417 02-05-13, 08:41 PM
آخر رد: مبرمج بلا حدود
  رجااااااااااااء عندي استفسار هام وعاجل في asp.net فجر الغد 2 402 02-11-12, 08:59 PM
آخر رد: فجر الغد

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


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