الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

a walk throught that i don't understand

مغلق
بدأه aroma في 28 فبراير 2005 · 9 رد · 571 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

Alsalam alikom

there is a walk throught that i saw in msdn but in fact i coulden't simulate it into my project

the walk throught name is

Walkthrough: Using a DataGrid Web Control to Read and Write Data

starting from that part of the code i cant understand or apply to my database

and i think there is easier way but i need first to understand that part then create my own part

string categoryName;
string categoryDescription;
TextBox tb;
tb = (TextBox) e.Item.Cells[2].Controls[0];
categoryName = tb.Text;
tb = (TextBox) e.Item.Cells[3].Controls[0];
categoryDescription = tb.Text
#2

ممكن تستخدم هاي الطريقة بالأغلب لو كان العمود تبع ال datagrid من نوع EditCommandColumns

حيث تستطيع الوصول للبيانات بطريقتك التي كتبتها .

أما لو استخدمت ال TemplateColumns فبإمكانك استخدام ال FindControl كالمثال التالي:

txtCatefory=(e.Item.FindControl("newCatName")).Text

و يمكن استخدام الطريقة الأولى عن طريق الوصول لل Control.

هذا ما فهمته منك لو كان قصدك شيء أخر فلا تتردد :)

You can fly while you can touch the sky

#3

عموما هذا مثال كتبته مرة في أحد الدروس يقوم بأخذ بيانات معينة من كنترول و يضيفها لقاعدةالبيانات ..

علها تفيدك :

Sub dg_UpdateCommand(source As Object, e As DataGridCommandEventArgs)
Dim newCatName As TextBox
Dim catID As String
Dim prov As String
Dim SQL As String
Dim cn As OleDbConnection
Dim reader As OleDbDataReader
Dim cmd As OleDbCommand

prov="Provider=Microsoft.Jet.OleDb.4.0;Data Source=" & Server.MapPath("db.mdb")
SQL="Update Categories set Category=@newCatName where id=@catID"

cn = new OleDbConnection(prov)
cmd = new OleDbCommand(SQL,cn)

newCatName=e.Item.FindControl("newCatName")
catID=dg.DataKeys(e.Item.ItemIndex)

cmd.Parameters.Add("@newCatName",newCatName.Text)
cmd.Parameters.Add("@catID",catID)

cn.Open()
cmd.ExecuteNonQuery()
cn.Close()

dg.EditItemIndex=-1
DataBind()

End Sub

أنت بالأول تقوم بإستقبال الأداة على أنها TextBox و كي تحصل على محتواها الذي هو من نوع String يجب أن تستخدم الخاصية Text.

انظر المثالين التاليين و هما يحملان نفس القيمة :

textbox myCategoryName;
string strCatName;
myCategoryName=e.Item.FindControl("newCatName");
strCatName=myCategoryName.Text;

Response.Write(myCategoryName.Text);  // o/p : ASP.NET
Response.Write(strCatName);  // o/p : ASP.NET
Response.Write((e.Item.FindControl("newCatName")).Text);  // o/p : ASP.NET

هذا لو افترضنا انك كتبت في ال TextBox قيمة ASP.NET

تحياتي

You can fly while you can touch the sky

#4

yah thanx i understanded

but

in fact i meant the rest of the code starting from that part i mentioned

as he used stuff i don't know why or even how did he made objects for them

try please to c the walk throught and reply me i really liked the code it's written in a greate way that's why i want to understand

#5

أخي العزيز انا شفت الموضوع هنا

http://msdn.microsoft.com/library/default....adwritedata.asp

و أنا شايف انه سهل جدا وما في شي غريب أو صعب.

وين الكود اللي نفسك تعرف معناه؟

وضح و سوف تجد الرد مني أو من أي أحد هنا

You can fly while you can touch the sky

#6
string categoryName;
string categoryDescription;
TextBox tb;
tb = (TextBox) e.Item.Cells[2].Controls[0];
categoryName = tb.Text;
tb = (TextBox) e.Item.Cells[3].Controls[0];
categoryDescription = tb.Text
Find the corresponding row in the data table. The typed dsCategories dataset contains a special FindBy method — in this case, the FindByCategoryID method — that locates a row by its primary key and returns a reference to it. Create a variable for the typed data row and call the method: 
' Visual Basic
Dim r As dsCategories.CategoriesRow
r = DsCategories1.Categories.FindByCategoryID(key)

// C#
dsCategories.CategoriesRow r;
r = dsCategories1.Categories.FindByCategoryID(int.Parse(key));
r.CategoryName = categoryName;
r.Description = categoryDescription;

i know it's easy but sometimes my brain is out of service from the day stress

so that part i really don't understand what it's function is

and what is r instance that he created

:)

thanx

تم تعديل هذه المشاركة بواسطة aroma في 28 فبراير 2005 في 02:16

#7

اوكي يبدو أني فهمت المطلوب ..

انت تسأل كيف وصل لهذه المنطقة مثلا؟

string categoryName;
string categoryDescription;
TextBox tb;
tb = (TextBox) e.Item.Cells[2].Controls[0];
categoryName = tb.Text;
tb = (TextBox) e.Item.Cells[3].Controls[0];
categoryDescription = tb.Text

ميكانيكية العمل :

هو قام بإدراج أداة DataGrid و قام بعمل أعمدة Columns معينة و في كل عمود كما ترى في المثال هناك قام بعرض عمود به أزرار للتعديل و الحذف و إلغاء العملية.

العمود الثاني يظهر ال ID للسجل.

الثالث : عبارة عن إسم التصنيف Category.

و الأخير للوصف Description

الان عند إدراج ال dataGrid و في مرحلة إضافة الأعمدة ضمن الوسم Columns و كانت من نوع BoundColumn قام بجعل العمود الخاص بال ID للقراءة بقط عن طريق إضافة الخاصية ReadOnly و جعل قيمتها true.

عند ضغط زر تعديل Update سوف تظهر جميل حقول الأعمدة في الصف Row الذي ضغطت على زر التعديل الخاص به على شكل TextBox ما عدا ال ID لأنه للقراءة فقط و بالتالي لا يسمح بتعديله لأنه PrimaryKey و عبارة عن autoNumber.

الان كل زر له حدث و لنفرض أنه أراد أن يعدل شيئا.

لو ضغطت على زر التعديل سوف يستدعى الحدث DgName_Update و طبعا يجب أن تضيف الحدث لل DataGrid و في منطقة الحدث تحتاج لرقم السجل الوحيد في قاعدة البيانات ال PrimaryKey حتى تعدل ال Row الذي تريد فقط فكيف تحصل عليه ؟

أولا عند أدراج ال DataGrid سوف تجد من بين الخصائص خاصية اسمها DataKeys قم بجعل قيمتها هي اسم الحقل الموجود في الجدول والذي هو PK.

الان في حدث التعديل عندما تكتب :

string key = DataGrid1.DataKeys[e.Item.ItemIndex].ToString();

سوف يجلب لك من جدول البيانات محتوى ال PK كي تستخدمه في ال Criteria الخاصة بجملة ال SQL.

الان بقي أن تحصل على قيم الحقول التي سوف تعدلها .

أنت تستقبل العناصر على انها ادوات من نوع TextBox كالتالي :

TextBox tb;
tb = (TextBox) e.Item.Cells[2].Controls[0];

هذا معناه التالي :

اسند للمتغير tb قمية ال Control ذو الرقم Index صفر و هو أول كنترول بداخل العمود الثالث طبعا كتب الرقم 2 لأن الأعمدة عبارة عن Collection و بالتالي يبدأ ال Index من صفر للعنصر الأول .. و لو أردنا الرابع نكتب الاندكس 3 و هكذا.

بالتالي سوف يجلب لك ال TextBox الأول في العمود الثالث و هو كما ترى بالصورة يمثل إسم التصنيف Category Name.

الان كيف ستحوله لنص كي تدخله لقاعدة البيانات ؟

استخدم الخاصية Text مع المتغير tb لانه TextBox و التي من خصائصها Text التي تعطيك القيمة النصية للمحتوى الخاص بها.

بعد ذلك سهل جدا أن تقوم بعملية التعديل بالطرق المعروفة.

أتمنى أن أكون فعلا فهمت المطلوب و وضحت لك الصورة أخي العزيز.

تحياتي لك

You can fly while you can touch the sky

#8

what about the rest of the code from where he got the object r as i tried it codely but no way

and that function he used (find by category)

did he made it or is it integrated

:)thanx

#9

اوكي .. هون بالمثال التالي :

dsCategories.CategoriesRow r;
r = dsCategories1.Categories.FindByCategoryID(int.Parse(key));

بيقلك انو في طريقة ال FindBy و في طريقة تانية اسمها FindByCategoryID و طبعا ال categoryID هو المفتاح PK و قيمة r تكون عبارة عن سجل من جدول موجود داخل ال DataSet والتي اسمها dsCategories1 و يقوم بإسترجاع قيمة المفتاح الوحيد PK عن طريق ال FindByCategoryID و لو كنت تستخدم جدول اخر و لنفرض ان ال PK فيه userID سوف تستخدم FindByUserID و لكن أنا أرى أن الطريقةالأولى أسهل لك.

الان انت حصلت على سجل كامل واسميته r كيف ستصل لل Fields الموجودة بداخله ؟

بسهولة لو أردت الوصول للحقل او العمود CategoryName و ال CategoryDescription يمكنك كتابة :

r.CategoryName = categoryName;
r.Description = categoryDescription;

اعتقد الان ان كل شيء واضح صح؟

You can fly while you can touch the sky

#10

ya3ni

i will try to code it again as i need same idea in my application

gazakom Allah khaia

هذا الموضوع مغلق.

مواضيع مشابهة