PDA

View Full Version : سوال: وابسته بودن دو ستون از نوع کمبوباکس در DataGrid



sm_1366
پنج شنبه 04 مهر 1392, 17:46 عصر
سلام به همگی من یه سوال داشتم

من یک دیتاگریدویو دارم دو تا ستونهاش از نوعه کمبوباکسه

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

hamid_hr
پنج شنبه 04 مهر 1392, 18:33 عصر
سلام
اول تو رويداد EditingControlShowing گريد ويو اينو بنويسين
ComboBox combo = e.Control as ComboBox;
if (combo != null)
{
combo.SelectedIndexChanged -=
new EventHandler(ComboBox_SelectedIndexChanged);
combo.SelectedIndexChanged +=
new EventHandler(ComboBox_SelectedIndexChanged);
}
بعد هم اين تابعو اضافه كنيد
private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
{

‍‌‌}

اين رويداد selectindexchange براي كومبو باكس گريد ميشه
حالا بايد چك كني اگه همون ستون كلاس بود بياد دانش اموزان رو لود كنه تو ستون بعديش
وگرنه هيچي

sm_1366
پنج شنبه 04 مهر 1392, 18:54 عصر
ممنون دوست عزیز اما این کد میفهمه منselected index changed کدوم کمبوباکسمو میگم.....?...?

hamid_hr
پنج شنبه 04 مهر 1392, 19:42 عصر
نه
بايد چك كني ببيني كدوم ستون فعاله
با اين ميتوني سطر ور ستونو بگيري
DataGridViewSelectedCellCollection DCC = DGV.SelectedCells;
int x = DCC[0].ColumnIndex;
int y = DCC[0].RowIndex;

sm_1366
پنج شنبه 04 مهر 1392, 19:49 عصر
عذر میخوام تکه ککد بالارو کجا باید بنویسم???

hamid_hr
پنج شنبه 04 مهر 1392, 21:08 عصر
تواين تابع
private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)

sm_1366
جمعه 05 مهر 1392, 22:01 عصر
ممنون امتحان کردم دوباره مزاحمت میشم لطف کردی بسیااااار

sm_1366
شنبه 06 مهر 1392, 22:40 عصر
عمل نکرد متاسفانه

خطا داد

sm_1366
چهارشنبه 04 دی 1392, 10:17 صبح
متن خطا

Object reference not set to an instance of an object.

sm_1366
دوشنبه 25 فروردین 1393, 08:44 صبح
کسی نیست راهنمایی کنه

sm_1366
دوشنبه 25 فروردین 1393, 09:03 صبح
کسی نیست؟؟؟
آقای hamid_hr?????????

sm_1366
دوشنبه 25 فروردین 1393, 09:33 صبح
این کدی هست که نوشتم:



if (x == 1)
{

int id_k = int.Parse(dataGridView1.Rows[y].Cells[x].Value.ToString());
tbl1 = First.select("select id_student from tblst where id_student=N'" + id_k + "'");
(dataGridView1.Rows[y].Cells[x + 1] as DataGridViewComboBoxCell).DataSource = tbl1;

(dataGridView1.Rows[y].Cells[x + 1] as DataGridViewComboBoxCell).DisplayMember = "id_student";
(dataGridView1.Rows[y].Cells[x + 1] as DataGridViewComboBoxCell).ValueMember = "id_student";
}


از خط اول خطا گرفت ...

hamid_hr
دوشنبه 25 فروردین 1393, 10:12 صبح
سلام

بیزحمت کد کامل مربوط به همین گرید رو بزار

sm_1366
دوشنبه 25 فروردین 1393, 14:52 عصر
تو لود فرم هنگام تعریف دیتاگرید ویو اینارو نوشتم:


DataTable tbl1l = First.select("select * from tblmadrese");


DataGridViewComboBoxColumn newcol1 = new DataGridViewComboBoxColumn();
newcol1.DataSource = tbl1;
newcol1.DisplayMember = "id_m";
newcol1.ValueMember = "id_m";
dataGridView1.Columns.Add(newcol1);



بعدش این:

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{


DataGridViewSelectedCellCollection ddc = dataGridView1.SelectedCells;
int x = ddc[0].ColumnIndex;
int y = ddc[0].RowIndex;
ComboBox combo = e.Control as ComboBox;
if (combo != null)
{


combo.SelectedIndexChanged -= new EventHandler(combobox_selectedindexchanged);
combo.SelectedIndexChanged += new EventHandler(combobox_selectedindexchanged);
}







بعدشم این:


private void combobox_selectedindexchanged(object sender, EventArgs e)
{
DataTable tbl1 = new DataTable();
DataTable tbl2 = new DataTable();
DataTable tbl3 = new DataTable();
DataGridViewSelectedCellCollection ddc = dataGridView1.SelectedCells;
int x = ddc[0].ColumnIndex;
int y = ddc[0].RowIndex;


if (x == 1)
{


tbl1 = First.select("select id_k from tblkelas where id_m=N'" + dataGridView1.Rows[y].Cells[x].Value.ToString() + "'");
(dataGridView1.Rows[y].Cells[x + 1] as DataGridViewComboBoxCell).DataSource = tbl1;
(dataGridView1.Rows[y].Cells[x + 1] as DataGridViewComboBoxCell).ValueMember = "id_k";
(dataGridView1.Rows[y].Cells[x + 1] as DataGridViewComboBoxCell).DisplayMember = "id_k";
}






وق

sm_1366
دوشنبه 25 فروردین 1393, 16:51 عصر
کسی نیست راهنماییم کنه
لطفا؟؟؟؟؟؟؟؟؟

behzadkhan
دوشنبه 25 فروردین 1393, 18:00 عصر
با سلام

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

(در یک فرم جدا تست کن اگه بدردت خورد بیار توی برنامت)
================================================


DataGridView dataGridView1 = new DataGridView();
DataGridViewComboBoxColumn ClassName = new DataGridViewComboBoxColumn();
DataGridViewComboBoxColumn DaneshjoList = new DataGridViewComboBoxColumn();


private void Form2_Load(object sender, EventArgs e)
{
this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeig htSizeMode.AutoSize;
this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.ClassName,
this.DaneshjoList});
this.dataGridView1.Location = new System.Drawing.Point(67, 403);
this.dataGridView1.Name = "dataGridView4";
this.dataGridView1.Size = new System.Drawing.Size(240, 150);
this.dataGridView1.TabIndex = 9;
this.dataGridView1.EditingControlShowing += new System.Windows.Forms.DataGridViewEditingControlSho wingEventHandler(dataGridView1_EditingControlShowi ng);
//
// ClassName
//
this.ClassName.HeaderText = "Column1";
this.ClassName.Items.AddRange(new object[] {
"a",
"b",
"c"});
this.ClassName.Name = "ClassName";
//
// DaneshjoList
//
this.DaneshjoList.HeaderText = "Column1";
this.DaneshjoList.Name = "DaneshjoList";


this.Controls.Add(this.dataGridView1);


}


private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
ComboBox combo = e.Control as ComboBox;
if (combo != null)
{
combo.SelectedIndexChanged -= new EventHandler(ComboBox_SelectedIndexChanged);
combo.SelectedIndexChanged += new EventHandler(ComboBox_SelectedIndexChanged);
}
}


private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
ComboBox cb = (ComboBox)sender;
string item = cb.Text;
DataGridViewComboBoxCell cbCell = (DataGridViewComboBoxCell)dataGridView1.Rows[0].Cells[1];
if (item != null)
switch (item.ToString())
{
case "a":
cbCell.Items.Clear();
cbCell.Items.Add("a1");
cbCell.Items.Add("a2");
cbCell.Items.Add("a3");
cbCell.Items.Add("a4");
break;
case "b":
cbCell.Items.Clear();
cbCell.Items.Add("b2");
cbCell.Items.Add("b4");
cbCell.Items.Add("b5");
cbCell.Items.Add("b6");
break;


case "c":
cbCell.Items.Clear();
cbCell.Items.Add("c2");
cbCell.Items.Add("c4");
cbCell.Items.Add("c5");
cbCell.Items.Add("c6");
break;


default:
break;
}
}



با تشکر