السلام عليكم
من خلال تعرضي للـ GridView
كان هناك مثال بالمنتدى القديم حول نقل قيمة من صفحة لأخرى , وكان المثال فيه CommandArguments + DataKeys+DataKeyNames
اتمنى لو احصل على فكرة نظرية ولو بسيطة عن هذه المصطلحات الثلاث (شو معناتهم , ومتى استخدمهم)
لم استطع فهم هذه المصطلحات من المراجع الانكليزية , أو الاحرى لم اجد مرجع يشرحها من البداية ,
سأكتب هنا ماتم التوصل اليه
مع مثال
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]
المثال هنا
[COLOR="#0000FF"]
[ATTACH]742[/ATTACH] [/COLOR]
أشكرك أخي سعود وموضوع مفيد جدا (عرض العناوين والتفاصيل )
وسأدرسه بالتفصيل ان شاء الله فالافكار مرتني من قبل, بارك الله فيك
أما موضوع نقل قيمة بالكويري سترنج فأنا لا أسأل عنه ولكن كان سؤالي حول المصطلحات التي كتبتها هل لها علاقة بنقل القيم بين الصفحات ..
ولكن تبين انه ليس لها علاقة , مجرد توهم فقط .
ثم بالتعليقات الاخرى كتبت كيفية استعمال بعض هذه المصطلحات .
بقي الان الـ DataKeys أو الـ DataKeyNames
شو شغلتهم ؟؟