PDA

View Full Version : Sort در ستونی از DataGridView که DataPropertyName = none می باشد.



mhsmity
دوشنبه 04 آذر 1392, 02:59 صبح
با سلام.
با سلام یک ستون دارم وقتی روی هدر ستون کلیک می کنم این ستون سرت نمی شود.
بقیه ستون ها مقدار DataPropertyName رو دارند،
ولی این ستون خصوصیت DataPropertyName مقدار دهی نشده است.

حالا چطوری وقتی روی این ستون کلیک شد مثل بقیه ستون مرتب بشه؟
درضم اطلاعات سلول های این ستون هم با یه حلقه فر مقدار دهی می شود.

majid1367
چهارشنبه 06 آذر 1392, 16:35 عصر
سورس For ای که گذاشتی برای ستونهاش چیه؟؟

mhsmity
چهارشنبه 06 آذر 1392, 17:20 عصر
از توجه شما خیلی ممنونم. ای به چشم.

private void dgv_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
idx = dgv.Columns["TotalSumH"].Index;
if (e.ColumnIndex == idx && e.RowIndex >= 0)
{
dgv.Rows[e.RowIndex].Cells["TotalSumH"].Value = smity.GrdFill("SELECT SUM(sumhour) AS sum FROM tblsummonGet WHERE (idmain = " + dgv["id", e.RowIndex].Value.ToString() + ") AND (sumhour > 0)").Rows[0][0].ToString();
}
}

یه نکته برای رویداد dgv_Sorted یک Breakpoint گذاشتم وقتی روی ستون مورد نظر کلیک می کنم اصلا وارد رویداد dgv_Sorted نمی شود.

plus
جمعه 08 آذر 1392, 03:12 صبح
http://social.msdn.microsoft.com/Forums/en-US/f7d221cd-cebc-4582-aa6f-383c5767b4f2/sorting-an-unbound-column

Mahmoud.Afrad
جمعه 08 آذر 1392, 20:05 عصر
جواب که داده شده.

فقط یک نکته اینکه نوشتن کوئری در رویداد cellpainting به هیچ وجه به صرفه نیست. میتونید از رویداد RowsAdded استفاده کنید.

mhsmity
جمعه 08 آذر 1392, 23:42 عصر
http://social.msdn.microsoft.com/Forums/en-US/f7d221cd-cebc-4582-aa6f-383c5767b4f2/sorting-an-unbound-column

سلام از توجه شما ممنونم
ولی خطای زیر رو درام


Data-bound DataGridView control can only be sorted on data-bound columns.
Parameter name: dataGridViewColumn

plus
یک شنبه 10 آذر 1392, 01:46 صبح
شما همه پست های لینکی که دادم رو بخونید...ستونی که bind نشده (DataPropertyName نداره) رو نمیتونید با متد Sort، مرتب کنید...یک راه ساده این هست که DataTable (یا هر DataSource دیگه ای که به DataGridView میدین ) رو بهش یک ستون دیگه اضافه کنید و ستونی که میگین داده هاش با حلقه بدست میاد رو هم با مشخص کردن DataPropertyName Bind کنید..(حذف صورت مساله)
در غیر این صورت، باید به صورت دستی رویداد کلیک هدر DataGridView رو هندل کنید و بر اساس مقادیر سلول های ستون مورد نظر، DataTable و داده های اون ستون رو به صورت دستی مرتب کنید که کار کم درد سری به نظر نمیاد.

mhsmity
یک شنبه 10 آذر 1392, 04:53 صبح
شما همه پست های لینکی که دادم رو بخونید...ستونی که bind نشده (DataPropertyName نداره) رو نمیتونید با متد Sort، مرتب کنید...یک راه ساده این هست که DataTable (یا هر DataSource دیگه ای که به DataGridView میدین ) رو بهش یک ستون دیگه اضافه کنید و ستونی که میگین داده هاش با حلقه بدست میاد رو هم با مشخص کردن DataPropertyName Bind کنید..(حذف صورت مساله)
در غیر این صورت، باید به صورت دستی رویداد کلیک هدر DataGridView رو هندل کنید و بر اساس مقادیر سلول های ستون مورد نظر، DataTable و داده های اون ستون رو به صورت دستی مرتب کنید که کار کم درد سری به نظر نمیاد.

از توجه شماخیلی ممنونم اگه جسارت نباشه امکانش هست یه نمونه کار برای دانلود بزارین ممنون

plus
یک شنبه 10 آذر 1392, 20:15 عصر
از توجه شماخیلی ممنونم اگه جسارت نباشه امکانش هست یه نمونه کار برای دانلود بزارین ممنون
حالت اول، که حذف صورت مساله هست راحته.. اگه میخواین یک مثال میزنم ولی حالت دوم وقت میگیره و درد سر زیاد داره خودتون باید حسابی باهاش سرو کله بزنید تا بتونید چیز خوبی در بیارید.

mhsmity
دوشنبه 11 آذر 1392, 01:55 صبح
حالت اول، که حذف صورت مساله هست راحته..

اگه حالت اول رو باهم برسی کنیم ممنون می شم.

plus
دوشنبه 11 آذر 1392, 02:05 صبح
شما کدی که به DataGridView داده ها رو میدی بگذار...باید یک ستون با نام TotalSumH به DataTable اضافه کنی.

mhsmity
دوشنبه 11 آذر 1392, 04:00 صبح
با سلام
از همه دوستان ممنونم که کمک کردن و بلاآخره به قطعه کد زیر رسیدیم :
واسطه استفاه دیگر دوستان می زارمش.


int i = 0;
DataTable dt = tbller.GetData();
dt.Columns.Add("test", typeof(System.Int32));
foreach (DataRow r in dt.Rows)
{
r["test"] = i += 2;
}
Dgv.DataSource = dt;

نتیجه اجرای قطعه کد بالا:
یک ستون با نام test به Dgv شما اضاقه می شود وقتی روی اون کلیک می کنید قابلیت Sort شدن رو هم داره.

mhsmity
دوشنبه 11 آذر 1392, 05:01 صبح
ب

int i = 0;
DataTable dt = tbller.GetData();
dt.Columns.Add("test", typeof(System.Int32));
foreach (DataRow r in dt.Rows)
{
r["test"] = i += 2;
}
Dgv.DataSource = dt;
.

در برنامه اصلی خودم قطعه کد بالا کار نمی کنه کسی دلیلش رو می دونه؟