PDA

View Full Version : دو سوال در مورد Datagrid



amir_hm
یک شنبه 11 اردیبهشت 1384, 16:07 عصر
دو سوال داشتم:
چگونه می توان تعداد سطرهای یک DataGrid را محاسبه کرد؟
و اینکه چه شکلی می شود در کد نویسی به سطر i ام این DataGrid دسترسی پیدا کرد تا آنرا به Dataset اضافه نمود؟
با تشکر

یاشار
یک شنبه 11 اردیبهشت 1384, 17:37 عصر
خود کنترل دیتاگرید شامل هیچ اطلاعاتی نیست. دیتاگرید فقط "طرز" نمایش اطلاعاته. خود اطلاعات باید از یه منبع دیگه بیاد که معمولا یک DataSet یا DataTable هست. وقتی دیتاگرید رو به یکی از این منابع مقید ( Bind ) می‌کنیم، در واقع دیتاگرید اطلاعات داخل منبع رو نشون میده.

بنابراین :
-چگونه منتوان نعداد سطرهای یک DataGrid را محاسبه کرد؟
-با شمردن تعداد سطرهای منبعی که DataGrid بهش مقیده ( مثلا یه DataSet ) به این صورت

ِ


ِDataSet1.Tables(0).Rows.Count


-چه شکلی می شود در کد نویسی به سطر i ام این DataGrid دسترسی پیدا کرد تا آنرا به Dataset اضافه نمود؟
-ردیف‌هایی رو که می‌خواهیم اضافه کنیم، به DataSet اضافه می‌کنیم. تغییرات بلافاصله در دیتاگردی هم دیده خواهند شد.

amir_hm
دوشنبه 12 اردیبهشت 1384, 11:42 صبح
چطوری محتوای datagrid را در dataset بریزم

یاشار
دوشنبه 12 اردیبهشت 1384, 12:49 عصر
عرض کردم خدمتتون، شما باید محتویات DataSet رو با DataGrid نشون بدید ( نه برعکس ).

اگر این کار رو می‌خواهید با کد انجام بدید : با فرض اینکه یک آداپتور با نام DataAdapter1 دارین :




ِDataAdapter1.Fill(DataSet1)

DG1.DataSource = DataSet1
DG1.DataMember = DataSet1.Tables(0).TableName


اگر هم بخواهین موقع طراحی با Designer این کار رو انجام بدین روی DataGrid تون کلیک کنید بعد در قسمت Property هاش برای خواص DataSource و DataMember ، مقادیر بالا رو با ماوس انتخاب کنید.

Behrouz_Rad
دوشنبه 12 اردیبهشت 1384, 14:02 عصر
چگونه می توان تعداد سطرهای یک DataGrid را محاسبه کرد؟


Dim i As Int32 = DataGrid1.VisibleRowCount



چه شکلی می شود در کد نویسی به سطر i ام این DataGrid دسترسی پیدا کرد تا آنرا به Dataset اضافه نمود؟
برای دستیابی به یک سطر خاص، از خاصیت Item عنصر DataGrid استفاده کنید.


DataGrid.Item (RowIndex, ColumnIndex)


برای تمامی ردیف های DataGrid نیز، یک DataTable ایجاد کنید و محتویات DataGrid را با دو حلقه For تو در تو در DataTable بریزید.


Dim dt As DataTable = New DataTable("T1")
Dim dc1 As DataColumn = New DataColumn("myCol1")
Dim dc2 As DataColumn = New DataColumn("myCol2")
dt.Columns.Add(dc1)
dt.Columns.Add(dc2)
For m As Int32 = 0 To DataGrid1.VisibleRowCount - 1
For i As Int32 = 0 To DataGrid1.VisibleColumnCount - 1
Dim k As DataRow = dt.NewRow
k(i) = DataGrid1.Item(m, i)
dt.Rows.Add(k)
Next
Next

در آخر، DataTable را به DataSet خود اضافه کنید.


Dim ds As DataSet = New DataSet
ds.Clear()
ds.Tables.Add(dt)

بهتره که DataTable را به صورت Public تعریف کرده و در روال Form_Load برنامه، ستون های آن را ایجاد کنید.
موفق باشید.

یاشار
دوشنبه 12 اردیبهشت 1384, 14:43 عصر
بهروز جان، جواب شما درست ... ولی این چه کاریه ... بالاخره DG از یه DataSource اطلاعاتشو Populate کرده. از همون استفاده می‌کنیم و می‌ریزیم توی یک دیتاست دیگه. ضمنا VisibleRowCount فقط ردیف‌هایی که در حال حاضر دیده میشن رو برمی‌گردونه نه همه ردیف های گرید رو.

سوال یه کم برای من عجیبه. شاید من سوال رو درست متوجه نشدم ... :گیج:

amir_hm
دوشنبه 12 اردیبهشت 1384, 21:49 عصر
راهنماییهای شما خیلی به من کمک کرد
حالا اگر table دارای دو فیلد ID و name باشد و بخواهیم Datagrid فقط name آنهایی را نشان بدهد که ID=x باشد چکار باید کرد
شرط where را کجا باید نوشت

یاشار
دوشنبه 12 اردیبهشت 1384, 23:02 عصر
از ToolBox یه شیی DataView بردارید و خاصیت Table اون رو برابر جدول مورد نظرتون در دیتاست‌تون قرار بدین و خاصیت Filter اون رو برابر ID = x بگذارید. بعد DataGrid رو به این View مقید کنین.



ِDataView1.Table = DataSet1.Tables(0)
DataView1.Filter = "ID = x"
ِDG1.DataSource = DataView1

amir_hm
سه شنبه 13 اردیبهشت 1384, 07:52 صبح
این کار را انجام داده ام ولی یک مشکل هست من نمیخواهم ستون ID در datagrid نمایش داده شود و فقط ستون name در آن باشد

یاشار
سه شنبه 13 اردیبهشت 1384, 13:24 عصر
اگر بخواهید ID نشون داده نشه هم روال همینه. فقط باید برای DataGrid تون یک ( یا چند تا ) TableStyle تعریف کنید. اصلا شاهکار Net. در اینه که کلا "اطلاعات" رو از "طرز نمایش" اونها تفکیک کرده ( separation of data and representation ) و این جور کارها به راحتی و با انعطاف بالا انجام می‌شه. مهمترین خاصیت‌های TableStyle، که باید بهش توجه کنید GridColumStyle (برای مشخص کردن اینکه چه ستونهایی به چه صورتی نمایش داده بشن ) و MappingName (برای مشخص کردن جدولی که میخواهید نمایش داده بشه ) هستند. توی این ترد (http://www.barnamenevis.org/forum/viewtopic.php?t=24375&highlight=)هم راجع بهش بحث شده. امیدوارم مشکلتون رو حل کنه.

Microsoft.net
سه شنبه 13 اردیبهشت 1384, 14:48 عصر
دوست عزیز برای کار کردن با datagrid بایند کردن اون به Dataset کار صحیحی از لحاظ برنامه نویسی نیست پیشنهاد می کنم ابتدا SqldataAdapter رو ست و جنریت کن سپس Dataview رو معادل اون در Dataset قرار بده و گرید رو به Dataview بایند کن . این چیزیه که خود مایکروسافت Recommend کرده حالا اگه هر کاری از قبیل حذف - اصلاح ....جستجو ... روی Dataview انجام بده و نتیجه رو روی گرید ببین

amir_hm
سه شنبه 13 اردیبهشت 1384, 15:46 عصر
هر کاری کردم نشد میشه بیشتر توضیح دهید

یاشار
سه شنبه 13 اردیبهشت 1384, 16:20 عصر
همونطور که آقای ( خانم ؟ ) MS.NET گفتن بهتره گرید رو مستقیما به دیتاست مقید نکنیم. این نمونه رو بررسی کنید اگر اون چیزی که می‌خواستین نبود همینجا پست بذارین.

amir_hm
چهارشنبه 14 اردیبهشت 1384, 06:21 صبح
مرسی مشکل من حل شد

leilav_1984
یک شنبه 17 مهر 1384, 00:42 صبح
همونطور که آقای ( خانم ؟ ) MS.NET گفتن بهتره گرید رو مستقیما به دیتاست مقید نکنیم. این نمونه رو بررسی کنید اگر اون چیزی که می‌خواستین نبود همینجا پست بذارین.



ممکنه نمونه رو یکبار دیگه اینجا بذارید تا ما هم فیض ببریم؟
ظاهرا تو خونه تکونی سایت پاک شده :گیج:

mehdi_vb
یک شنبه 17 مهر 1384, 23:06 عصر
برای شمارش تعداد سطر های یک datagride می توان از تکه برنامه زیر استفاده کنی

datag.items.count

Amir Taghavi
جمعه 22 مهر 1384, 01:57 صبح
اگر بخواهم آخرین رکورد وارد شده در datagrid انتخاب گردد و به کاربر نشان داده شود چکار باید کرد