PDA

View Full Version : سوالاتی در مورد کامبو باکس



mahtab_r
سه شنبه 28 مرداد 1393, 22:39 عصر
سلام دوستان دوتا سوال در مورد کامبو باکس داشتم ممنون میشم راهنمایی کنید که چیکار باید بکنم.
1-یه کامبو دارم که آیتم هایش رو از جدول میگیره وحالا میخوام اگه یه موردی تو جدول نبود و در کامبو تایپ شد به اون جدول اضافه بشه.(و مسلما به ایتم های کامبو هم اضافه شود)
2-اینکه میخوام وقتی اطلاعاتو ویرایش میکنم. کامبو باکس ها با مقدار ذخیره شده در جدول پر بشن. فرض کنید در جدول کتاب :کد کتاب, نام کتاب ,کد گروه (کلیدخارجی)وجود داره حالا کامبو باکس نام گروه رو نمایش بده نمیخوام کد گروه نمایش داده بشه.:متفکر:

mortezasar
چهارشنبه 29 مرداد 1393, 01:34 صبح
سلام برای سوال اول میتونید یک دکمه کنار کمبو بذارین و هرچیزی که توی کمبو نوشتید رو درون دیتابیس بریزید (این راه مبتدیش هست من حرفه ای نیستم)
و سوال دوم شما بیاین سلکت ها تون رو روی جدول هاتون بزنید و بریزید توی دیتاتیبل بعد از خاصیت DISPLAYMEMBER کمبو استفاده و کنید و دیتاتیبل رو به کمبو متصل کنید

cbday.Displaymember = "DAY_NAME";
cbday.Datasource=dt;

به سیستم دسترسی ندارم واستون همین جوری نوشتم حواستون باشه اشتباه تایپی نداشته باشه

aminmousavi
چهارشنبه 29 مرداد 1393, 08:14 صبح
سلام دوست عزیز .
در خصوص سوال اولتون ، برای اینکار باید روی اونت comboBox1_KeyPress شرطی بزارین که اگر دکمه Enter فشار داده شد ، مقدار وارد شده در combo با Item های موجود بررسی بشه ، اگر مساوی با مقداری توی Combo نبود عملیات درج صورت بگیره . و دوباره از دیتابیس select بزنید تا مقدار ها لود شود (چون به DataSource وصل میشه نمیتونین مقدار Combo.text رو با Combo.Items.Add ذخیره کنین ، اگر بخواهید اینکار رو بکنید نباید به Combo دیتاسورس بدین ، باید دستی Item ها رو add کنین)

کدش هم به صورت زیر میشه : (فرضیات : یک جدول به نام Combo دارم که دو تا فیلد داره id (auto number) , Name(nvarchar) )


private DataSet SelectDatabase(string _table, string _conditon)
{
DataSet ds = new DataSet();
SqlConnection Connection = new SqlConnection("Connection String");
SqlDataAdapter DA = new SqlDataAdapter();
DA.SelectCommand = new SqlCommand();
DA.SelectCommand.Connection = Connection;
DA.SelectCommand.CommandText = _conditon;
DA.Fill(ds, _table);
return ds;
}
private DataSet Add_Name(string _value)
{
DataSet ds = new DataSet();
SqlConnection Connection = new SqlConnection("Connection String");
SqlDataAdapter DA = new SqlDataAdapter();
DA.SelectCommand = new SqlCommand();
DA.SelectCommand.Connection = Connection;
DA.SelectCommand.CommandText = "INSERT INTO Combo Values ('"+_value+"')";
DA.Fill(ds, "Combo");
return ds;
}
private void LoadCombo()
{


DataSet ds = new DataSet();
ds = SelectDatabase("Combo", "SELECT * FROM Combo");
if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
{
comboBox1.DataSource = ds.Tables[0];
comboBox1.DisplayMember = "Name";
}
}


private void Form9_Load(object sender, EventArgs e)
{
LoadCombo();
}
private void comboBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 13)
{


bool find = false;
for (int i = 0; i < comboBox1.Items.Count; i++)
{

if (comboBox1.Text == comboBox1.GetItemText(comboBox1.Items[i]))
{
find = true;
}
}
if (find == false)
{
Add_Name(comboBox1.Text);
LoadCombo();
}
}
}

aminmousavi
چهارشنبه 29 مرداد 1393, 09:21 صبح
در خصوص سوال دومتون هم یک پروپرتی برای دیتاسورس کومبو باکستون (Dataset) بسازید ، سپس از جدول Book_Group سلکت بزنین و مقادیر خروجی رو توی Property بریزید
زمانی که برای رکورد کتاب Select زدید یک حلقه بزارید که شروع کند row های دیتاست رو پیمایش کنه و توی بنده حلقه شرط بزارین که id رکورد های Group_Book رو با id گروه کتاب مقایسه کنه ، اگر برابر بود Combo.SelectIndex=i قرار دهید ، توی دکمه Update هم برای بدست آوردن id گروه کتاب ، سطر Combo.SelectedIndex رو از دیتاسورس (Property - Dataset) بردارید و ستون اولش رو که برابر با id هست رو برای آپدیت در نظر بگیرین .

تکه کدش هم به این صورت میشه (با فرض جدول Group_Book : id,Name - Book : id , Code , Name ,idGroup) (کد آپدیت رو نذاشتم دیگه ، اگر به مشکل خوردید بگید راهنمایی تون کنم)


public DataSet dsCombo { get; set; }
private DataSet SelectDatabase(string _table, string _conditon)
{
DataSet ds = new DataSet();
SqlConnection Connection = new SqlConnection("Connection String");
SqlDataAdapter DA = new SqlDataAdapter();
DA.SelectCommand = new SqlCommand();
DA.SelectCommand.Connection = Connection;
DA.SelectCommand.CommandText = _conditon;
DA.Fill(ds, _table);
return ds;
}
private void LoadCombo()
{
dsCombo = new DataSet();
dsCombo = SelectDatabase("Book_Group", "SELECT * FROM Book_Group");
if (dsCombo != null && dsCombo.Tables.Count > 0 && dsCombo.Tables[0].Rows.Count > 0)
{
comboBox2.DataSource = dsCombo.Tables[0];
comboBox2.DisplayMember = "Name";
}
}
private void Form10_Load(object sender, EventArgs e)
{
string code = "1004";
LoadCombo();
DataSet ds = new DataSet();
ds = SelectDatabase("Book", " SELECT * FROM Book WHERE Code='"+code+"'");
if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
{
txtCode.Text = ds.Tables[0].Rows[0][1].ToString();
txtName.Text = ds.Tables[0].Rows[0][2].ToString();
for (int i = 0; i < dsCombo.Tables[0].Rows.Count; i++)
{
if (dsCombo.Tables[0].Rows[i][0].ToString() == ds.Tables[0].Rows[0][3].ToString())
{
comboBox2.SelectedIndex = i;
}
}
}


}

aminmousavi
چهارشنبه 29 مرداد 1393, 09:23 صبح
در خصوص سوال دومتون هم یک پروپرتی برای دیتاسورس کومبو باکستون (Dataset) بسازید ، سپس از جدول Book_Group سلکت بزنین و مقادیر خروجی رو توی Property بریزید
زمانی که برای رکورد کتاب Select زدید یک حلقه بزارید که شروع کند row های دیتاست رو پیمایش کنه و توی بنده حلقه شرط بزارین که id رکورد های Group_Book رو با id گروه کتاب مقایسه کنه ، اگر برابر بود Combo.SelectIndex=i قرار دهید ، توی دکمه Update هم برای بدست آوردن id گروه کتاب ، سطر Combo.SelectedIndex رو از دیتاسورس (Property - Dataset) بردارید و ستون اولش رو که برابر با id هست رو برای آپدیت در نظر بگیرین .


تکه کدش هم به این صورت میشه (با فرض جدول Group_Book : id,Name - Book : id , Code , Name ,idGroup) (کد آپدیت رو نذاشتم دیگه ، اگر به مشکل خوردید بگید راهنمایی تون کنم)



public DataSet dsCombo { get; set; }
private DataSet SelectDatabase(string _table, string _conditon)
{
DataSet ds = new DataSet();
SqlConnection Connection = new SqlConnection("Connection String");
SqlDataAdapter DA = new SqlDataAdapter();
DA.SelectCommand = new SqlCommand();
DA.SelectCommand.Connection = Connection;
DA.SelectCommand.CommandText = _conditon;
DA.Fill(ds, _table);
return ds;
}
private void LoadCombo()
{
dsCombo = new DataSet();
dsCombo = SelectDatabase("Book_Group", "SELECT * FROM Book_Group");
if (dsCombo != null && dsCombo.Tables.Count > 0 && dsCombo.Tables[0].Rows.Count > 0)
{
comboBox2.DataSource = dsCombo.Tables[0];
comboBox2.DisplayMember = "Name";
}
}
private void Form10_Load(object sender, EventArgs e)
{
string code = "1004";
LoadCombo();
DataSet ds = new DataSet();
ds = SelectDatabase("Book", " SELECT * FROM Book WHERE Code='"+code+"'");
if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
{
txtCode.Text = ds.Tables[0].Rows[0][1].ToString();
txtName.Text = ds.Tables[0].Rows[0][2].ToString();
for (int i = 0; i < dsCombo.Tables[0].Rows.Count; i++)
{
if (dsCombo.Tables[0].Rows[i][0].ToString() == ds.Tables[0].Rows[0][3].ToString())
{
comboBox2.SelectedIndex = i;
}
}
}


}