PDA

View Full Version : مخفی کردن یکی از رکورد ها در dataGridView



mohammad2407
پنج شنبه 24 اسفند 1391, 16:15 عصر
سلام دوستان عزیز من یک dataGridView دارم میخوام در این dataGridView یکی از رکورد ها مخفی باشه ؟

یک سوال دیگه هم داشتم چرا وقتی روی قسمت هیدر dataGridView راست و یا چپ کلیک میکنم برنامه خطا میده ؟

در این dataGridView از contextMenuStrip استفاده شده و به خوبی هم کار میکنه


چه راهی برای این وجود داره ؟؟

alexmcse
پنج شنبه 24 اسفند 1391, 16:24 عصر
سلام
DataGridView d = new DataGridView();
//مثلا سطر 5
d.Rows[5].Visible = false;

چه خطایی؟
نشان بده

mohammad2407
پنج شنبه 24 اسفند 1391, 17:24 عصر
سلام
DataGridView d = new DataGridView();
//مثلا سطر 5
d.Rows[5].Visible = false;

چه خطایی؟
نشان بده

متاسفانه کد شما رو خودم قبلا استفاده کردم . این کد کاربردی نداره و 100 درصد باگ هست

با اضافه کردن اطلاعات به دیتا گردی و یا مرتب سازی دیتا گرید اون رکورد هم خودشو نشون میداد .

پس کد من و یا بهتره بگم کد شما کاربردی نداره !!!!

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

khokhan
پنج شنبه 24 اسفند 1391, 18:01 عصر
با سلام

عمل مخفی کردن ردیف رو داخل یک متد جداگانه قراربده

وهر کجا که قراره تغییری در دیتا گرید رخ بده آخر دستورات اون متد مخفی کردن رو فراخوانی بکن

mohammad2407
پنج شنبه 24 اسفند 1391, 22:52 عصر
این کار هم کردم ولی یک سری مشکلات پیش میاد.

باید یه کاری کرد کلا نره از بانک رکورد اول بخونه !!!!

khokhan
پنج شنبه 24 اسفند 1391, 23:14 عصر
سلام

دقیقا قصد دارین کدام رکورد نشون داده نشه ؟

بایستی این مسئله رو مشخص کنین مثلا رکورد خالی مخفی بشه ، یا 5 تای اول ، یاچه می دونم یه همچی چیزی

docendo
جمعه 25 اسفند 1391, 00:09 صبح
متاسفانه کد شما رو خودم قبلا استفاده کردم . این کد کاربردی نداره و 100 درصد باگ هست

با اضافه کردن اطلاعات به دیتا گردی و یا مرتب سازی دیتا گرید اون رکورد هم خودشو نشون میداد .

پس کد من و یا بهتره بگم کد شما کاربردی نداره !!!!

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

با درود
این را امتحان کنید پیشتر تست شده و 100 درصد باگ نیست


DataGridViewF.Columns[5].Visible = false;



ساده شده پست شماره است

mohammad2407
جمعه 25 اسفند 1391, 00:31 صبح
با درود
این را امتحان کنید پیشتر تست شده و 100 درصد باگ نیست


DataGridViewF.Columns[5].Visible = false;



ساده شده پست شماره است

دوست من ، من میخوام رکورد ( Rows) مخفی بشه نه Columns

کد شما کلا میاد یک فیلد که مربوط میشه به همه رکورد ها رو مخفی میکنه

اصلا از سوال من جداست

لطفا یک بار دیگه سوال منو بخونید و بعد پاسخ بدید

من میخوام یکی از رکورد هامو مخفی کنم Rows

mohammad2407
جمعه 25 اسفند 1391, 01:08 صبح
مثلا 5 تای اول مخفی بشه !

و با اضافه شدن و یا ... باز هم نمایش داده نشه

Mahmoud.Afrad
جمعه 25 اسفند 1391, 01:45 صبح
دقیقا میخوای چه رکوردهایی نمایش داده نشن یعنی این رکوردها چه شرائطی دارن.
کدی هم که دیتاگرید رو پر میکنی بزار.

mohammad2407
جمعه 25 اسفند 1391, 01:52 صبح
اقا محمود من به وسیله کد زیر اطلاعات از بانک لود میکنم در دیتاگرید.


var db = new usersDataContext();
var users_query = db.users;
this.dataGridView1.DataSource = users_query;


میخوام رکورد اول و یا رکورد اول تا 3 مخفی باشن .

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

docendo
جمعه 25 اسفند 1391, 02:52 صبح
دوست من ، من میخوام رکورد ( Rows) مخفی بشه نه Columns

کد شما کلا میاد یک فیلد که مربوط میشه به همه رکورد ها رو مخفی میکنه

اصلا از سوال من جداست

لطفا یک بار دیگه سوال منو بخونید و بعد پاسخ بدید

من میخوام یکی از رکورد هامو مخفی کنم Rows


بفرما چرا میزنید


int iRowIndex = this.uiActionDates.SelectedRows[5].Index;
this.uiActionDates.CurrentCell = null;
this.uiActionDates.Rows[iRowIndex].Visible = false;

j_naroogha@yahoo.com
جمعه 25 اسفند 1391, 04:18 صبح
فگ نکنم کد شما مشکل دوستمون رو حل کنه....

Mahmoud.Afrad
جمعه 25 اسفند 1391, 05:12 صبح
به هر تعداد که میخوای skip کن و مابقی رو بگیر:

var users_query = db.users.OrderBy(u => u.id).Skip(3);
/* OR
var users_query = (from u in db.users
orderby u.id
select u).Skip(3);
*/

mohammad2407
جمعه 25 اسفند 1391, 13:05 عصر
اقا محمود در فرم لود به صورت زیر نوشتم ولی کلا عمل نکرد و رکورد ها مخفی نشدن


var db = new usersDataContext();
var users_query = db.users;
dataGridView1.DataSource = users_query;
var users_hide = db.users.OrderBy(u => u.id).Skip(3);

Mahmoud.Afrad
جمعه 25 اسفند 1391, 22:27 عصر
ترتیبو رعایت کن:

var db = new usersDataContext();
var users_query = db.users.OrderBy(u => u.id).Skip(3);
dataGridView1.DataSource = users_query;

mohammad2407
جمعه 25 اسفند 1391, 22:38 عصر
باز هم عمل نکرد


var db = new usersDataContext();
var users_query = db.users;
var users_hide = db.users.OrderBy(u => u.id).Skip(1);
dataGridView1.DataSource = users_query;


حالا مهم نیست

اقا محمود من یک مشکل دیگه دارم با راست کلیک روی هیدر dataGridView وقتی راست کلیک میکنم برنامه خطا میده همون ارور قرمز .

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

Mahmoud.Afrad
شنبه 26 اسفند 1391, 02:16 صبح
یه نگاه به کدت بنداز میفهمی چیو داری به گرید میفرستی.
همون سه خط پست16 رو کپی کن.

منو راست کلیک رو هم نباید به خود گرید نسبت بدی. باید به ستونها (و یا سلول ها) نسبت داده بشه. بعد از اینکه اطلاعات رو به گرید بایند کردی با یک حلقه منو رو تنظیم کن:

var db = new usersDataContext();
var users_query = db.users.OrderBy(u => u.id).Skip(3);
dataGridView1.DataSource = users_query;
foreach (DataGridViewColumn col in dataGridView1.Columns)
{
col.ContextMenuStrip = contextMenuStrip1;
}

mohammad2407
شنبه 26 اسفند 1391, 12:51 عصر
اقا محمود اون مشکل متوجه شدم و حل شد:اشتباه:

حالا مشکل من با ContextMenuStrip هست من امدم در قسمت dataGridView1_CellMouseDown کد زیر نوشتم .

فکر میکنم با کد شما تداخل داره


if (e.Button == System.Windows.Forms.MouseButtons.Right)
{
dataGridView1.CurrentCell = dataGridView1[e.ColumnIndex, e.RowIndex];
contextMenuStrip1.Show(MousePosition.X, MousePosition.Y);
}


:خجالت:

linux
شنبه 26 اسفند 1391, 16:48 عصر
سلام دوستان عزیز من یک dataGridView دارم میخوام در این dataGridView یکی از رکورد ها مخفی باشه ؟یک سوال دیگه هم داشتم چرا وقتی روی قسمت هیدر dataGridView راست و یا چپ کلیک میکنم برنامه خطا میده ؟در این dataGridView از contextMenuStrip استفاده شده و به خوبی هم کار میکنه چه راهی برای این وجود داره ؟؟
کدام رکورد می‌‌خواهی مخفی بشه؟ از کجا می‌‌خواهی تشخیص بدی که باید مخفی بشه؟

Mahmoud.Afrad
یک شنبه 27 اسفند 1391, 05:05 صبح
اقا محمود اون مشکل متوجه شدم و حل شد:اشتباه:

حالا مشکل من با ContextMenuStrip هست من امدم در قسمت dataGridView1_CellMouseDown کد زیر نوشتم .

فکر میکنم با کد شما تداخل داره


if (e.Button == System.Windows.Forms.MouseButtons.Right)
{
dataGridView1.CurrentCell = dataGridView1[e.ColumnIndex, e.RowIndex];
contextMenuStrip1.Show(MousePosition.X, MousePosition.Y);
}


:خجالت:
وقتی منو رو تنظیم کردی دیگه نیازی به این کد نیست. این قسمت رو از CellMouseDown حذف کن. اگر کد دیگه ای داخلش نیست رویدادو حذف کن.

mohammad2407
یک شنبه 27 اسفند 1391, 14:00 عصر
اقا محمود مرسی درست شد ! فقط یک مشکل خیلی بد هست الان . روی رکورد هایی که انتخاب ( select ) نشدن هم contextMenuStrip باز میشه ولی عملیات برای رکوردی که انتخاب شده انجام میشه. حالا باید یه کاری کرد که وقتی راست کلیک هم میکنه رکورد انتخاب بشه

Mahmoud.Afrad
یک شنبه 27 اسفند 1391, 16:58 عصر
خوب اگر اینطوری میخوای دو راه داری یکی اینکه منو رو به سلولها نسبت بدی که ...
راه دیگه هم اصلاح همون کد قبلی هست.

پس این حلقه رو خذف کن:
foreach (DataGridViewColumn col in dataGridView1.Columns)
{
col.ContextMenuStrip = contextMenuStrip1;
}


به جاش همون رویداد CellMouseDown رو به کار ببر منتها اندیس سلول رو چک کن منفی نباشه:

private void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Right && e.RowIndex >= 0 && e.ColumnIndex >= 0)
{
dataGridView1.CurrentCell = dataGridView1[e.ColumnIndex, e.RowIndex];
contextMenuStrip1.Show(MousePosition.X, MousePosition.Y);
}
}