PDA

View Full Version : تعریف ستون های سفارشی با dataGridView



sempay_ninjutsu
پنج شنبه 26 آبان 1390, 17:54 عصر
با سلام
دوستان من یه گرید ویو دارم که در زمان اجرا مقدار دهی میشه.اما میخوام از بین مثلا 10 تا فیلدی که در جدول هست فقط 5 تا نمایش داده بشه.ولی با این روش من همش نمایش داده میشه.
اینم کد:

connection con_se=new connection ();
DataSet ds = new DataSet();

da = new SqlDataAdapter( "select * from Pezeshk_tb",con_se.Con);

DataTableMapping tblmap=new DataTableMapping ();
DataColumnMapping colmap=new DataColumnMapping ();

tblmap=da.TableMappings.Add("Table","Pezeshk_tb");

colmap=tblmap.ColumnMappings.Add("Name_pezeshk","نام");
colmap=tblmap.ColumnMappings.Add("Family_pezeshk","نام خانوادگی");
colmap=tblmap.ColumnMappings.Add("Number_pezeshk","شماره نظام پزشکی");
colmap=tblmap.ColumnMappings.Add("Expert_pezeshk","تخصص");
colmap=tblmap.ColumnMappings.Add("Day_week", "روز حضور");
colmap = tblmap.ColumnMappings.Add("Time_week", "ساعت حضور");

da.Fill(ds);
Dgv.DataSource=ds;
Dgv.DataMember = "Pezeshk_tb";
con_se.Con.Dispose();
con_se.Con.Close();

Mahmoud Zaad
پنج شنبه 26 آبان 1390, 18:06 عصر
سلام
توی کوئری به جای select*from بنویس: select field1,field2,field3,field4,field5 from jadval

sempay_ninjutsu
پنج شنبه 26 آبان 1390, 20:14 عصر
مرسی،انقدر فک کرده بودم مغزم ترکید.......
به غیراز این راه ،راه دیگری وجود نداره؟؟؟؟؟؟(مثلا با استفاده از همین گرید ویو)
با تشکر

Mahmoud Zaad
پنج شنبه 26 آبان 1390, 20:25 عصر
سلام
نمیدونم دقیقا منظورت چه راهیه ولی من از این استفاده می کنم

OleDbDataAdapter da = new OleDbDataAdapter("SELECT drid, cod, name,esdate FROM driver", con);
DataSet ds = new DataSet();
DataTable driver = new DataTable();
da.Fill(ds, "driver");

dataGridViewX1.DataSource = ds;
dataGridViewX1.DataMember = "driver";

dataGridViewX1.Columns["drid"].Visible=false;
dataGridViewX1.Columns["cod"].HeaderText = " ";
dataGridViewX1.Columns["name"].HeaderText = " ";
dataGridViewX1.Columns["esdate"].HeaderText = " ";

sempay_ninjutsu
جمعه 27 آبان 1390, 16:21 عصر
پس میشه ستون هایی هم که اوردم visible شون را false کنم؟

Mahmoud Zaad
جمعه 27 آبان 1390, 16:31 عصر
آره این کارم میشه کرد بستگی داره چکاری می خوای انجام بدی "مثلاً فرض کن من اطلاعاتم رو بر اساس id حذف یا ویرایش می کنم حالا اگه اونو فراخوانی نکنم از اول که نمی تونم آپدیت رو انجام بدم پس باید فراخوانی بشه ولی نیازی نیست که کاربر این فیلد رو ببینه پس visible اش رو فالس می کنم."

sempay_ninjutsu
پنج شنبه 03 آذر 1390, 17:15 عصر
اگه من بخام وقتی روی دیتا گرید ویو هستم با زدن دکمه اینتر مقدار اون ستون رو نشون میده و این کد رو نوشتم جوابم میده ولی من میخام اون فیلد هایی(مثل آیدی پزشک که یکتا است)و الان ویزیبلش فالس نشون بده.
یا اینکه دستوری باشه که بتونه مقدار فیلد های مخفی شده رو نشون بده؟

private void dataGridView1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 13)
{
MessageBox.Show(dataGridView1.CurrentCell.Value.To String());
}
}
با تشکر

sempay_ninjutsu
پنج شنبه 03 آذر 1390, 17:32 عصر
این کد رو نوشتم اما اگه اینتر زده بشه میره رکورد بعد.چکار کنم که نره رکورد بعد؟

MessageBox.Show(dataGridView1.Rows[0].Cells[0].Value.ToString());

Mahmoud Zaad
پنج شنبه 03 آذر 1390, 19:13 عصر
سلام
یه کلاس به پروژه اضافه کن بعد این کدها رو توی کلاس بنویس، با اینکار یه کنترل جدید به اسم customDataGridView به ToolBox اضافه میشه حالا به جای اینکه از دیتاگریدویو معمولی استفاده کنی می تونی از این استفاده کنی که با زدن اینتر به جای اینکه بره سطره بعد، میره یه سلول مجاور(ستون بعد). این کنترل از دیتاگریدویو ارث میبره و خاصیتها و ایونتهاش همونهاست. کدی رو هم که نوشتی می تونی توی رویداد CellEndEdit دیتاگریدویو(در اینجا customDataGridView) بنویسی.

classCustomDataGridView : DataGridView
{
protectedoverridebool ProcessDialogKey(Keys keyData)
{
Keys key = (keyData & Keys.KeyCode);
if (key == Keys.Enter)
{
returnthis.ProcessLeftKey(keyData);
}
returnbase.ProcessDialogKey(keyData);
}
protectedoverridebool ProcessDataGridViewKey(KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
returnthis.ProcessLeftKey(e.KeyData);
}
returnbase.ProcessDataGridViewKey(e);
}
}

sempay_ninjutsu
سه شنبه 08 آذر 1390, 17:24 عصر
MessageBox.Show(dataGridView1.Rows[0].Cells[0].Value.ToString());
وقتی دیتا گرید ویو من پر میشه اگه 1 رکورد باشه این کد جواب میده ولی اگه 2 یا 3 یا .. باشه بازم فقط مقدار اولین رکورد رو بر می گردونه.مشکل کجاست؟

Mahmoud Zaad
سه شنبه 08 آذر 1390, 18:30 عصر
اون صفرهای جلوی Rows و Cells اندیس(Index) های سطر یا ستون مورد نظر هستند پس شما باید برای هر ردیف یا ستونی که می خواید اطلاعاتش رو بدست بیارید باید شماره اندیس اون ردیف یا ستون رو به جای 0 بنویسید.

sempay_ninjutsu
پنج شنبه 10 آذر 1390, 09:38 صبح
خوب دوست عزیز من چه جوری اندیس هر سطر رو بدست بیاورم؟

sempay_ninjutsu
پنج شنبه 10 آذر 1390, 10:30 صبح
e.RowIndex
مشکل با نوشتن این کد حل شد.