PDA

View Full Version : کار با سلول ها در DataGrid



Davood_amega
چهارشنبه 21 مهر 1389, 00:35 صبح
چه جوری در DataGrid یک ستون رو جوری تغییر دهم که همیشه مقدارش کمتر از ستون دیگه باشه ؟
و اینکه در هر سطر ستون سومی دارم که حاصلضرب دو ستون دیگه را نمایش می دهد ! چه جوری این کار را انجام بدم ؟
ضمنا برای به دست آوردن سلول خاصی در DataGrid از کد زیر استفاده کردم !

MessageBox.Show(((DataRowView)DataGrid1.Items[i]).Row[j].ToString());

Davood_amega
چهارشنبه 21 مهر 1389, 11:49 صبح
برای به دست آوردن سطر و ستون سلول انتخاب شده :

columnIndex = dtgUsable.SelectedCells[0].Column.DisplayIndex;
rowIndex = dtgUsable.Items.IndexOf(dtgUsable.SelectedCells[0].Item);
برای مقداردهی به سلولها :

(this.DataGrid1.Items[rowIndex] asDataRowView)[columnIndex] = "new value";
و برای به دست آوردن مقدار سلول علاوه بر کد بالا از کی زیر هم استفاده می شود .

((DataRowView)dtgUsable.Items[rowIndex]).Row[columnIndex].ToString()

Davood_amega
چهارشنبه 21 مهر 1389, 15:27 عصر
همچنان سر DataGrid مشکل دارم . یک DataTable را به DataGrid ای Bind کردم !می خواهم وقتی که یک سلول DataGrid تغییر کرد اولا چک کنه که مقدار یکی از ستونها از ستون دیگه ای کمتر باشه و اینکه حاصلضرب دو تا ستون در یک ستون دیگه ای بیاد !
وقتی این کدها را در کلیک Button می نویسم مشکلی نداره ولی وقتی در رویدادهای KeyDown و CellEditEnding و ... یک DataGrid می نویسم مشکل دارد یعنی انگار تا سطر عوض نشه تغییرات را اعمال نمی کنه !

Davood_amega
جمعه 23 مهر 1389, 23:20 عصر
لطفا راهنماییم کنید !

:گریه: :عصبانی++: :گریه: :عصبانی++: :گریه: :عصبانی++:

Davood_amega
یک شنبه 25 مهر 1389, 22:59 عصر
دوستان همچنان مشکل دارم ضمنا سوالی که sara62 در این پست (http://barnamenevis.org/forum/showthread.php?t=253814) داده بود هم دقیقا این سوال است !

Davood_amega
دوشنبه 26 مهر 1389, 22:07 عصر
مشکل ضرب دو ستون را در این سایت (http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression%28VS.71%29.aspx) پیدا کردم !

DataTable1.Columns.Add("Stuff_Qty",typeof(Int16));
DataTable1.Columns.Add("Stuff_BuyCost", typeof(Int32));
DataTable1.Columns.Add("Stuff_Cost", typeof(Int32), "[Stuff_Qty] * [Stuff_BuyCost]");
وجمع کل یک ستون را با این کد نوشتم :

DataTabl1.Columns.Add("Stuff_AllCost", typeof(Int32), "Sum([Stuff_Cost])");
فقط مشکلی که داره زمانی که سطر عوض شود و کاراکتری را وارد کنیم ، خروجی را میده !
ضمنا همچنان کمتر بودن ستونی نسبت به ستون دیگه رو پیدا نکردم !

mahdi7s
سه شنبه 27 مهر 1389, 14:03 عصر
اصلا اینها هیچ کدام چیز پیچیده ای نیستند ...
مشکل شما از آنجا سرچشمه می گیرد که می خواهید حتما یک DataTable واکشی شده را مستقیما بایند کنید و بدیهی است که آن جوری که شما می خواهید اطلاعات نمایش داده بشوند نمایش داده نمی شوند.

همانطور که اینجا (http://barnamenevis.org/forum/showthread.php?t=253814) هم گفتم


یک کلاس با چند خصیصه عمومی ایجاد کنید بعد هم یک لیست از آن کلاس بسازید و اطلاعاتتان را از DataTable بخوانید و به آن لیست اضافه کنید و بایند کنید

وقتی کلاس فوق را ساختید باید بهش بفهمونید که اگه مقدار Value1 بزرگتر از Value2 بود مقدار آن را کمتر کند یا مقدار خصیصه Value3 را برابر با ضرب Value1 و Value2 قرار بده...

موفق باشید

Davood_amega
سه شنبه 27 مهر 1389, 15:49 عصر
متاسفانه اطلاعاتم در این زمینه کمه !
اگه میشه یک مثال بزنید .