PDA

View Full Version : نحوه پر کردن کمبوباکس datagridview از کمبو باکس دیگر در همان سطر



ehsan1198
پنج شنبه 30 بهمن 1393, 13:31 عصر
با عرض سلام خدمت دوستان و اساتید
من یک مشکلی در دیتا گرید دارم و اونم اینه که،یک دیتا گرید دارم که دو ستون از نوع کمبو باکس داره، که بعنوان مثال یک کمبو باکس لیست استان هاست و دیگری لیست شهرهاست.
میخوام با انتخاب هر استان در کمبو باکس اول لیست شهرهای مربوط به همان استان در کمبو باکس دوم نمایش داده شود.
از اساتید خواهشمندم در این زمینه راهنمایی بفرمایید.

Death Ghost
پنج شنبه 30 بهمن 1393, 14:18 عصر
سلام اینو تست کن


List<string> firstCity = new List<string>();
List<string> secondCity = new List<string>();
List<string> thirdCity = new List<string>();
firstCity.Add("tehran");
firstCity.Add("karaj");
secondCity.Add("mashat");
secondCity.Add("ahvaz");
thirdCity.Add("ghom");
thirdCity.Add("arak");
switch (comboFirst.SelectedIndex)
{
case -1:
comboSecond.Items.Clear();
break;
case 0:
comboSecond.Items.Clear();
comboSecond.DataSource = firstCity;
break;

case 1:
comboSecond.Items.Clear();
comboSecond.DataSource = secondCity;
break;
case 2:
comboSecond.Items.Clear();
comboSecond.DataSource = thirdCity;
break;
default:
comboSecond.Items.Clear();
break;
}

Death Ghost
پنج شنبه 30 بهمن 1393, 14:28 عصر
تو بر نامه ای که نوشتم و برات فرستادم همه comboSecond.Items.Clear(); را پاک کن و فقط اونی که تو case -1 هست رو بزار باشه.

ehsan1198
پنج شنبه 30 بهمن 1393, 17:45 عصر
تو بر نامه ای که نوشتم و برات فرستادم همه comboSecond.Items.Clear(); را پاک کن و فقط اونی که تو case -1 هست رو بزار باشه.

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

golbafan
پنج شنبه 30 بهمن 1393, 17:47 عصر
باید از ایونت دیتاسورس استفاده کنید

ehsan1198
پنج شنبه 30 بهمن 1393, 18:48 عصر
باید از ایونت دیتاسورس استفاده کنید

من خودم این کد رو نوشتم

private void dataGridViewX1_CellEndEdit(object sender, DataGridViewCellEventArgs e) {
if (e.ColumnIndex == dataGridViewX1.Columns[2].Index)
{
int g = Convert.ToInt32(this.dataGridViewX1.Rows[e.RowIndex].Cells[2].Value);

if (dKala.FillCombo(g).Rows.Count > 0)
{


((DataGridViewComboBoxCell)dataGridViewX1.Rows[e.RowIndex].Cells[3]).DataSource = dKala.FillCombo(g);
((DataGridViewComboBoxCell)dataGridViewX1.Rows[e.RowIndex].Cells[3]).DisplayMember = "Name_Kala";
((DataGridViewComboBoxCell)dataGridViewX1.Rows[e.RowIndex].Cells[3]).ValueMember = "code";
}

}

}
اولش همه چی خوبه و مشکلی نداره اما وقتی از کمبو باکس دوم آیتمی را انتخاب کنی، بعد بخوای گروهتو اصلاح کنی از طریق کمبو باکس اولی دچار خطا میشه

ehsan1198
پنج شنبه 30 بهمن 1393, 20:21 عصر
128649

اینم تصویری از خطای برنامه،لطفا کمک کنید فوریه.....

golbafan
پنج شنبه 30 بهمن 1393, 20:38 عصر
چک کنید که اگر تغییرات مربوط به فیلد مورد نظر بود این کار انجام بشه

در کد شما این شرط موجود نیست

ehsan1198
جمعه 01 اسفند 1393, 05:22 صبح
چک کنید که اگر تغییرات مربوط به فیلد مورد نظر بود این کار انجام بشه

در کد شما این شرط موجود نیست

من شرط تغییرات رو گذاشتم ولی بازم برتامه خطا میده

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) {
if (e.ColumnIndex == this.dataGridView1.Columns[1].Index)
{
label2.Text = this.dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();
filldatacomboware(e.RowIndex,2);
}
}

ehsan1198
شنبه 02 اسفند 1393, 06:28 صبح
دوستان کسی نیست کمک کنه واقعا ضروریه....

psdkzaeri
دوشنبه 23 آذر 1394, 05:40 صبح
من شرط تغییرات رو گذاشتم ولی بازم برتامه خطا میده

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) {
if (e.ColumnIndex == this.dataGridView1.Columns[1].Index)
{
label2.Text = this.dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();
filldatacomboware(e.RowIndex,2);
}
}



چون کومبوباکس رو با اعداد پر میکنی این خطا رو میده

psdkzaeri
دوشنبه 23 آذر 1394, 05:52 صبح
آیتم های کومبو باکس اولی رو که بدون مشکل از بانک میخونی. ولی فقط نام استانها رو داخل کومبوباکس بریز و کداستانها رو درون valuemember قرار نده
به جاش یه تابع بنویس که نام استان رو بگیره و کد استان رو برگردونه بهت.

اینکارو که کردی یه تابع از نوع DataSet تعریف کن، مثال زیر

private DataSet DsCity(string codeostan)
{
da=new SqlDataAdapter("SELECT * FROM tblCity WHERE ostan='"+codeostan+"'",con);
DataSet dss=new DataSet();
da.fill(ds,"tblCity");
Return dss;
}

اینم از تابع فقط نام گذاری ها رو طبق برنامه خودت انجام بده
بعدشم که تو خاصیت Cell_EndEdit بنویس همون چیزی که خودت نوشتی فقط نام شهرها رو باید درون کومبوباکس بریزی و اصلا کدها رو قرار نده

aliramazani
دوشنبه 13 اردیبهشت 1395, 04:37 صبح
از طریق linq به چه صورته؟

kordestan
دوشنبه 13 اردیبهشت 1395, 11:50 صبح
دوستان من یه کدی می خوام که هر موقع اسمی اضافه شد خودش ستون رو از اول تا آخر چک کنه و انو بندازه تو کمبو باکس

ژیار رحیمی
دوشنبه 13 اردیبهشت 1395, 15:17 عصر
با عرض سلام خدمت دوستان و اساتید
من یک مشکلی در دیتا گرید دارم و اونم اینه که،یک دیتا گرید دارم که دو ستون از نوع کمبو باکس داره، که بعنوان مثال یک کمبو باکس لیست استان هاست و دیگری لیست شهرهاست.
میخوام با انتخاب هر استان در کمبو باکس اول لیست شهرهای مربوط به همان استان در کمبو باکس دوم نمایش داده شود.
از اساتید خواهشمندم در این زمینه راهنمایی بفرمایید.


public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
}
private List<Cuntry> lstCuntry;
private List<State> lstCity;
private void Form3_Load(object sender, EventArgs e)
{
lstCuntry = new List<Cuntry>
{
new Cuntry {Id = 1, Name = "ایران"},
new Cuntry {Id = 2, Name = "عراق"},
new Cuntry {Id = 3, Name = "فرانسه"}
};


lstCity = new List<State>
{
new State {Id = 1, CuntryId = 1, Name = "تهران"},
new State {Id = 2, CuntryId = 1, Name = "شیراز"},
new State {Id = 5, CuntryId = 2, Name = "بغداد"},
new State {Id = 6, CuntryId = 2, Name = "موصل"},
new State {Id = 7, CuntryId = 3, Name = "پاریس"},
new State {Id = 8, CuntryId = 3, Name = "لیون"}
};
//نام ستون کامبوباکس در دیتاگریدcmbCuntry
cmbCuntry.DataSource = lstCuntry;
cmbCuntry.DisplayMember = "Name";
cmbCuntry.ValueMember = "Id";
//نام ستون کامبوباکس در دیتاگریدcmbCity
cmbCity.DisplayMember = "Name";
cmbCity.ValueMember = "Id";
}


private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (dataGridView1.CurrentCell.ColumnIndex != 0) return;
var comboBox = e.Control as ComboBox;
if (comboBox != null) comboBox.SelectedIndexChanged += comboBox_SelectedIndexChanged;
}
void comboBox_SelectedIndexChanged(object sender, EventArgs e)
{
var selectedIndex = ((ComboBox)sender).SelectedIndex;
if (selectedIndex >= 0)
cmbCity.DataSource = lstCity.Where(c => c.CuntryId == selectedIndex + 1).ToList();
}
}
public class Cuntry
{
public int Id { get; set; }
public string Name { get; set; }
}
public class State
{
public int Id { get; set; }
public int CuntryId { get; set; }
public string Name { get; set; }
}