PDA

View Full Version : سوال: پر کردن دو TextBox بعد از اتصال ComboBox به دیتابیس با استفاده از تکنیک Linq to Sql



bmvgod
جمعه 30 آذر 1397, 21:45 عصر
باسلام خدمت دوستان
جدول پروژم با اسم CommodityCodTable بصورت زیره:
149482

تو پروژم ComboBox ام رو به این جدول وصل کردم که مقادیر فیلد CommodType رو نمایش میده و برای نمایش اطلاعات در ComboBox از کد زیر تو لود فرمم استفاده کردم:

Tarazo_Linq_To_SqlDataContext db;
private void frmAddCommod_Load(object sender, EventArgs e)
{
db = new Tarazo_Linq_To_SqlDataContext();
comboBox1.ValueMember="RowCod";
comboBox1.DisplayMember = "CommodType";
comboBox1.DataSource = db.CommodityCodTables.ToList();
}

حالا میخوام با انتخات فیلدی از ComboBoxام رکوردی که تو فیلد RowCod هست رو در TextBox 1 نمایش بده و رکوردی که داخل فیلد CommodAbbrev هست رو داخل TextBox 2 نمایش بده.
با تکنیک linq to sql از چه کدی باید داخل comboBox1_SelectedIndexChanged استفاده کنم که با تغییر گزینه ComboBox ام مقادیر TextBox م هم تغییر کنه?

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

Mahmoud.Afrad
جمعه 30 آذر 1397, 23:11 عصر
در رویداد مورد نظر ، پراپرتی SelectedItem را به CommodityCodTable تبدیل و به پراپرتی هایش دسترسی پیدا کنید.

bmvgod
شنبه 01 دی 1397, 00:04 صبح
در رویداد مورد نظر ، پراپرتی SelectedItem را به CommodityCodTable تبدیل و به پراپرتی هایش دسترسی پیدا کنید.

ممنون از راهنماییتون. من از کد زیر استفاده کردم:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
var ComType = from i in db.CommodityCodTables
where i.CommodType == Convert.ToString(comboBox1.SelectedValue)
select i;
textBox1.DataBindings.Add("Text", db.CommodityCodTables, "Rowcod");
textBox2.DataBindings.Add("Text", db.CommodityCodTables, "CommoAbbrev");
}

ولی به خطای زیر برخورد کردم:
149484

نمیدونم روشم درسته یا نه؟
ممنون میشم راهنماییم کنید

Mahmoud.Afrad
شنبه 01 دی 1397, 01:20 صبح
نه ، منظورم چیز دیگه ای بود.
اگر binding بخواهید استفاده کنید نیاز به رویداد SelectedIndexChanged ندارید. به صورت زیر عمل کنید
Tarazo_Linq_To_SqlDataContext db;

private void frmAddCommod_Load(object sender, EventArgs e)
{
db = new Tarazo_Linq_To_SqlDataContext();
comboBox1.ValueMember = "RowCod";
comboBox1.DisplayMember = "CommodType";
var list =db.CommodityCodTables.ToList();
comboBox1.DataSource = list;
textBox1.DataBindings.Add("Text", list, "Rowcod");
textBox2.DataBindings.Add("Text", list, "CommoAbbrev");
}

bmvgod
شنبه 01 دی 1397, 12:01 عصر
نه ، منظورم چیز دیگه ای بود.
اگر binding بخواهید استفاده کنید نیاز به رویداد SelectedIndexChanged ندارید. به صورت زیر عمل کنید
Tarazo_Linq_To_SqlDataContext db;

private void frmAddCommod_Load(object sender, EventArgs e)
{
db = new Tarazo_Linq_To_SqlDataContext();
comboBox1.ValueMember = "RowCod";
comboBox1.DisplayMember = "CommodType";
var list =db.CommodityCodTables.ToList();
comboBox1.DataSource = list;
textBox1.DataBindings.Add("Text", list, "Rowcod");
textBox2.DataBindings.Add("Text", list, "CommoAbbrev");
}

ممنون از راهنماییتون. ولی باز همون خطارو میده.وقتی یک TextBox هست بدون مشکل اجرا میشه، اما وقتی دومین TextBox رو میزارم همون خطا رو میده.
کد نهایی تو فرم لود اینجوریه:

Tarazo_Linq_To_SqlDataContext db;
private void frmAddCommod_Load(object sender, EventArgs e)
{
db = new Tarazo_Linq_To_SqlDataContext();
comboBox1.ValueMember="RowCod";
comboBox1.DisplayMember = "CommodType";
var list = db.CommodityCodTables.ToList();
comboBox1.DataSource = list;
textBox1.DataBindings.Add("Text", list, "Rowcod");
textBox2.DataBindings.Add("Text", list, "CommoAbbrev");
}

bmvgod
شنبه 01 دی 1397, 12:07 عصر
نه ، منظورم چیز دیگه ای بود.
اگر binding بخواهید استفاده کنید نیاز به رویداد SelectedIndexChanged ندارید. به صورت زیر عمل کنید
Tarazo_Linq_To_SqlDataContext db;

private void frmAddCommod_Load(object sender, EventArgs e)
{
db = new Tarazo_Linq_To_SqlDataContext();
comboBox1.ValueMember = "RowCod";
comboBox1.DisplayMember = "CommodType";
var list =db.CommodityCodTables.ToList();
comboBox1.DataSource = list;
textBox1.DataBindings.Add("Text", list, "Rowcod");
textBox2.DataBindings.Add("Text", list, "CommoAbbrev");
}

اگر نخوام از Binding استفاده کنم، شما چه شیوه و کدی پیشنهاد میکنید؟

bmvgod
شنبه 01 دی 1397, 17:10 عصر
نه ، منظورم چیز دیگه ای بود.
اگر binding بخواهید استفاده کنید نیاز به رویداد SelectedIndexChanged ندارید. به صورت زیر عمل کنید
Tarazo_Linq_To_SqlDataContext db;

private void frmAddCommod_Load(object sender, EventArgs e)
{
db = new Tarazo_Linq_To_SqlDataContext();
comboBox1.ValueMember = "RowCod";
comboBox1.DisplayMember = "CommodType";
var list =db.CommodityCodTables.ToList();
comboBox1.DataSource = list;
textBox1.DataBindings.Add("Text", list, "Rowcod");
textBox2.DataBindings.Add("Text", list, "CommoAbbrev");
}

مشکل برطرف شد. ولی با تغییر گزینه comboBox تغییری در TexBox ها ایجاد نمیشه؟
چرا نمیدونم؟
میشه راهنماییم بفرمایید

Mahmoud.Afrad
شنبه 01 دی 1397, 21:18 عصر
مشکل برطرف شد. ولی با تغییر گزینه comboBox تغییری در TexBox ها ایجاد نمیشه؟
چرا نمیدونم؟
میشه راهنماییم بفرمایید

پروژه را قرار بدید یا پیام خصوصی کنید.

Mahmoud.Afrad
شنبه 01 دی 1397, 23:01 عصر
مشکل برطرف شد. ولی با تغییر گزینه comboBox تغییری در TexBox ها ایجاد نمیشه؟
چرا نمیدونم؟
میشه راهنماییم بفرمایید

منبع داده(list) باید یکسان باشد. در پروژه ای که پ.م کردید اینطور نیست.

bmvgod
یک شنبه 02 دی 1397, 10:30 صبح
منبع داده(list) باید یکسان باشد. در پروژه ای که پ.م کردید اینطور نیست.

چه تغیری باید بهش بدم؟

Mahmoud.Afrad
یک شنبه 02 دی 1397, 17:21 عصر
چه تغیری باید بهش بدم؟

private void frmAddCommodity_Load(object sender, EventArgs e)
{
string Date = PerCale.GetYear(DateTime.Now).ToString()
+"/"+ PerCale.GetMonth(DateTime.Now) +"/"+ PerCale.GetDayOfMonth(DateTime.Now);

txtDate.Text = Date+"-"+ DateTime.Now.ToString("HH:mm:ss" );

db = new LinqToTrazoDataContext();
var list = db.CommodityCodTables.ToList();
cmbCommodityGrouping.ValueMember = "RowCod";
cmbCommodityGrouping.DisplayMember = "CommodType";
cmbCommodityGrouping.DataSource = list;
txtCodCommodity.DataBindings.Add("Text", list, "Rowcod");
txtAbbrev.DataBindings.Add("Text", list, "CommodAbbrev");
}

bmvgod
یک شنبه 02 دی 1397, 22:37 عصر
private void frmAddCommodity_Load(object sender, EventArgs e)
{
string Date = PerCale.GetYear(DateTime.Now).ToString()
+"/"+ PerCale.GetMonth(DateTime.Now) +"/"+ PerCale.GetDayOfMonth(DateTime.Now);

txtDate.Text = Date+"-"+ DateTime.Now.ToString("HH:mm:ss" );

db = new LinqToTrazoDataContext();
var list = db.CommodityCodTables.ToList();
cmbCommodityGrouping.ValueMember = "RowCod";
cmbCommodityGrouping.DisplayMember = "CommodType";
cmbCommodityGrouping.DataSource = list;
txtCodCommodity.DataBindings.Add("Text", list, "Rowcod");
txtAbbrev.DataBindings.Add("Text", list, "CommodAbbrev");
}

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

bmvgod
پنج شنبه 06 دی 1397, 14:12 عصر
private void frmAddCommodity_Load(object sender, EventArgs e)
{
string Date = PerCale.GetYear(DateTime.Now).ToString()
+"/"+ PerCale.GetMonth(DateTime.Now) +"/"+ PerCale.GetDayOfMonth(DateTime.Now);

txtDate.Text = Date+"-"+ DateTime.Now.ToString("HH:mm:ss" );

db = new LinqToTrazoDataContext();
var list = db.CommodityCodTables.ToList();
cmbCommodityGrouping.ValueMember = "RowCod";
cmbCommodityGrouping.DisplayMember = "CommodType";
cmbCommodityGrouping.DataSource = list;
txtCodCommodity.DataBindings.Add("Text", list, "Rowcod");
txtAbbrev.DataBindings.Add("Text", list, "CommodAbbrev");
}


باسلام مجدد خدمت دوستان
الان برنامه به اینصورت شد که با انتخاب گزینه ای از ComboBox که وصل هست به فیلد CommodType جدول CommoCodTable و به صورت خودکار txtAbbrev و txtCodCommodity پر میشود.
حالا میخوام کدو طوری تغییرش بدم که بره فیلد RowCommo از جدول CommoTabal بخونه یک واحد بهش اضافه کنه و در txtCodCommodity چاپ کنه.
ممنون میشم راهنماییم کنید که چه تغییری باید بدم.
باتشکر از تمامی دوستان و بزرگواران