PDA

View Full Version : سوال: ایجاد ستون ردیف در دیتاگرید با وجود شرط Group By



pedramfj
دوشنبه 24 مرداد 1390, 14:56 عصر
سلام
می خواهم زمانی که اطلاعات را در دیتاگرید نمایش می دهم در ستون اول ردیف داشته باشم.این کار را توسط کد زیر که در رویداد cellformatting دیتاگرید نوشته ام انجام می دهم.

dataGridView1.Rows[e.RowIndex].Cells[0].Value = e.RowIndex + 1;
این کار یک مشکل ایجاد می کند.در زمانی که باید فیلد ها را انتخاب کرد(select f1,f2,f3,...)یک فیلد باید اضافه تر (خارج از نیاز )نیز انتخاب گردد .
این کار در روش معمولی جواب می دهد . ولی در زمانی که از دستور Group By استفاده می شود دچار مشکل می شود.
ایا می توانم در زمان اضافه کردن اطلاعات به دیتاگرید (توسط کد زیر)از ستون دوم شروع به درج کنم؟

dataGridView1.Rows.Add(new object[] { dr.GetInt64(0), dr.GetString(1).Trim(), dr.GetInt64(2), dr.GetInt64(3), dr.GetInt64(4) });

اگر لینکی , روش بهتری , برای اضافه کردن ردیف به دیتاگرید وجود دارد ممنون میشم...

morteza271
دوشنبه 24 مرداد 1390, 15:06 عصر
شما می تونید دستور select رو به طور عادی بنویسید یعنی بدون ستون اضافه و در فرمتون خودتون به صورت دستی یک ستون اضافه کنید و اونو مقداردهی کنید.

pedramfj
دوشنبه 24 مرداد 1390, 15:24 عصر
اگر درست متوجه شده باشم , منظورتون این است که بعد از اینکه دیتاگرید را مقدار دهی کردم در آخر یک ستون به اول دیتاگرید اضافه کنم و ...
ممنون میشم اگر کد اضافه کردن ستون به ابتدای دیتاگرید را اینجا قرار دهید.

morteza271
دوشنبه 24 مرداد 1390, 15:29 عصر
آره درسته!
لزومی نداره با کد این کار رو بکنید میتونید با استفاده از ویزارد این کار رو بکنید.
یعنی در پنجره Propertice گرید از خاصیت Columns استفاده کنید و در اونجا یک ستون به ابتدا اضافه کنید.

morteza271
دوشنبه 24 مرداد 1390, 15:31 عصر
اگر هم خواستین با کد این کار رو بکنید این کدشه :
dataGridView1.Columns.Add("test", "تست");
موفق باشید

pedramfj
دوشنبه 24 مرداد 1390, 15:51 عصر
ممنونم.
مشکل من هنوز حل نشده.توسط این کد ستون به انتهای دیتاگرید اضافه می شود در حالی که من می خواهم در ابتدای دیتاگرید اضافه شود.
اگر این کار را انجام دهم مثلا نام کتاب در ستون ردیف نمایش داده می شود.
تنها را اینست که بعد از اینکه اطلاعات را در دیتاگرید نمایش دادم یک ستون به ابتدای دیتاگرید اضافه کنم و ردیف را در آن قرار دهم.

morteza271
دوشنبه 24 مرداد 1390, 16:04 عصر
برای اینکه ستون جدید به ابتدا ستون ها بیاد این کد رو بزنید :
dataGridView1.Columns.Add("test", "تست");
dataGridView1.Columns["test"].DisplayIndex = 0;
شرمنده حواسم نبود که میخواین بیاد اول و کدشو نذاشته بودم!

pedramfj
دوشنبه 24 مرداد 1390, 16:09 عصر
یه سوال:می توان مکان ستون ها را جابجا کرد؟(یعنی ستون پنجم به ابتدای دیتاگرید آورده شود)

morteza271
دوشنبه 24 مرداد 1390, 16:15 عصر
آره میشه.
هم با کد مثل همون کدی که براتون گذاشتم.
با کد هم میشه اسم ستون رو بهش پاس داد :
dataGridView1.Columns["ColumnName"].DisplayIndex = 0;
و هم میشه شماره ستون رو بهش پاس داد :
dataGridView1.Columns[5].DisplayIndex = 0;
فقط توجه کنید که شماره ستون و اسم ستونی که میدین درست باشه.

با ویزارد هم میتونین این کار رو بکنید که به نظر من بهتره!

pedramfj
دوشنبه 24 مرداد 1390, 16:42 عصر
با این کد ها مشکلم حل شد فقط یه مشکل کوچیک مونده.
وقتی از دیتاگرید پرینت میگیرم .ردیف که در ابتدای دیتاگرید قرار دارد به انتهای لیست می رود.
آیا می توان index ستون ردیف که برابر 5 است را برابر 0 قرار داد.تا در نمایش مشکلی پیش نیاد؟

morteza271
دوشنبه 24 مرداد 1390, 16:46 عصر
مگه چطوری از گرید پرینت میگیرید؟از کامپوننت خاصی استفاده می کنید؟
مگه Index ستون ردیف صفرنیست؟پس چطوری در ابتداری لیست هستش ؟!!!

pedramfj
دوشنبه 24 مرداد 1390, 16:55 عصر
از کامپوننت خاصی استفاده نمی کنم.با استفاده از printDocument1_PrintPage و printPreviewDialog1 و printDialog1 از دیتاگرید پرینت می گیرم.
index ردیف برابر 5 است که من با استفاده از کد شما آن را به ابتدای دیتاگرید میاورم.که در زمان پرینت بر اساس شماره ستون مرتب می کند که ردیف در آخر قرار می گیرد.
اگر بتوانم index ردیف را برابر 0 کنم , فکر کنم مشکل حل شود.

morteza271
دوشنبه 24 مرداد 1390, 17:06 عصر
فکر کنم اگه از داخل ویزارد ردیف رو در اول ستون ها قرار بدین درست یشه.
یعنی لازم نیست با کد این کار رو بکنید و فقط با ویزارد این کار رو بکنید.شاید درست شه....

pedramfj
دوشنبه 24 مرداد 1390, 17:27 عصر
دوست عزیز ممنون از لطفی که کردی.
هر کاری انجام می دهم(چه بصورت ویزاردی چه با استفاده از کد)درست نمی شود
تنها کاری که الان شاید بتوانم انجام بدم این است که right to left دیتاگرید را برابر no کنم و ستون ها را برعکس درج کنم.
تشکر...

morteza271
دوشنبه 24 مرداد 1390, 17:35 عصر
شرمنده راستش من با این روشی که شما پرینت میگیرن کار نکردم و نمیدونم چطوری عمل میکنه که ردیف میره آخر!!!
موفق باشید.