1 ضمیمه
دریافت مقدار چند Value از کمبو باکس
سلام
کمبوباکس توسط جدول زیر پر میشه :
ضمیمه 153567
کد پرشدن کمبوباکس : comboBoxKala.DataSource = _db.comboBoxKala_Select();
comboBoxKala.DisplayMember = "plus";
comboBoxKala.ValueMember = "KalaId";
حالا میخوام هر وقت کاربر یکی از ایتم های کمبوباکس رو انتخاب کنه مقادیر ستون pis و Price_Sales در مقادیری ریخته بشه؟؟؟
مثلا کاربر زردچوبه رو انتخاب می کنه و باید مقادیر 32 و 14000 در متغیری ریخته بشه که هدفم هم این هست که موجودی و قیمت فروش همان لحظه به کاربر در تکس باکسی نمایش
داده بشه
خیلی ممنون راهنمایی بفرمایید
نقل قول: دریافت مقدار چند Value از کمبو باکس
این مشکل فقط یک راه داره
و اونم اینه که از کامبوباکس DevComponent استفاده کنید که هر آیتم، یک کلید و یک مقدار (نام و تکست و تگ و تولتیپ داره و هریک از این مقادیر رو می تونید به یکی از ستون های جدول اختصاص بدید)
نقل قول: دریافت مقدار چند Value از کمبو باکس
سلام
شما ار datagridview استفاده کن
نقل قول: دریافت مقدار چند Value از کمبو باکس
چند سال پیش از این روش استفاده کرده بودم ولی الان یادم رفته
نیازی هم به دیتاگریدویو نیست.
کمبوباکس رو اسپلیت میکرد و مثلا split1 داخلش مقدار صفر ستون کمبوباکس بریزه ، برای split2 مقدار یک ستون کمبوباکس رو بریزه و همینجوری به ازای هر ستون در کمبوباکس یک split میزاشتم
حالا اگر مهندسان عزیز ، کد کاملش رو برام بزارن ، ممنون میشم
نقل قول: دریافت مقدار چند Value از کمبو باکس
نقل قول:
نوشته شده توسط
Hossis
این مشکل فقط یک راه داره
و اونم اینه که از کامبوباکس DevComponent استفاده کنید که هر آیتم، یک کلید و یک مقدار (نام و تکست و تگ و تولتیپ داره و هریک از این مقادیر رو می تونید به یکی از ستون های جدول اختصاص بدید)
البته اگر قرار به استفاده از کمپوننت های devex باشه کنترل های lookupedit (grid یا search) بمراتب انتخاب های بهتری هستن.
نقل قول: دریافت مقدار چند Value از کمبو باکس
نقل قول:
نوشته شده توسط
mkmostafa
چند سال پیش از این روش استفاده کرده بودم ولی الان یادم رفته
نیازی هم به دیتاگریدویو نیست.
کمبوباکس رو اسپلیت میکرد و مثلا split1 داخلش مقدار صفر ستون کمبوباکس بریزه ، برای split2 مقدار یک ستون کمبوباکس رو بریزه و همینجوری به ازای هر ستون در کمبوباکس یک split میزاشتم
حالا اگر مهندسان عزیز ، کد کاملش رو برام بزارن ، ممنون میشم
1- شما میتونین کمبوباکس رو به همون روش معمولی استفاده کنین و بعد در رخداد selectedindexchanged یا selectedvaluechanged بر اساس value از همون دیتاتیبل که کمبو رو پر کردین هر مقداری که لازم دارین بخونین.
2- اون مورد split که اشاره کردین:
میتونین value member رو بجای kalaid با join ستونهای مورد نیاز پر کنین (جدا کننده فیلدها باید کارآکتری باشه که مطمئن هستین در هیچ فیلدی ظاهر نمیشه)
بعد در همین رخدادهایی که گفته شد value رو split کنین.
نقل قول: دریافت مقدار چند Value از کمبو باکس
احسنت! من هم همین رو میخوام.
کدش رو میتونید برام بزارید.
یک مثال در مورد کمبوباکس بزارید
خیلی ممنون ، مهندس عزیز.
نقل قول: دریافت مقدار چند Value از کمبو باکس
فرض کنیم دیتاتیبل comboBoxKala_Select یک ستون به اسم col_details داشته باشه که از join شدن فیلدهای kalaid و pis و price_sales با یک کارآکتر مشخص (مثلا @) ساخته شده.
فعلا به این که این ستون چجوری ساخته میشه کاری نداریم و اول کد بخش استخراج اطلاعات از اون رو تکمیل میکنیم.
در رخداد form load :
comboBoxKala.DataSource = _db.comboBoxKala_Select();
comboBoxKala.DisplayMember = "plus";
comboBoxKala.ValueMember = "col_details";
در رخداد selectedindexchanged کمبو comboBoxKala :
if (comboBoxKala.selectedvalue == null) return;
string[] a;
a=comboBoxKala.selectedvalue.tostring().split('@') ;
حالا در a[0] مقدار kalaid ، در a[1] مقدار pis و در a[2] مقدار price_sales رو داریم.
البته وقتی با کد کمبوباکس رو bind میکنیم بهتر هست از رخداد selectionchangecommitted استفاده کنیم.
حالا روش ساخت فیلد col_details رو بررسی میکنیم.
یک راه این هست که در دستور select کوئری اون رو بیاریم:
SELECT kalaid , plus , pis , price_sales , kalaid + '@' + pis + '@' + price_sales AS col_details FROM ...
برای سادگی و رساندن مطلب فرض کردیم هر سه فیلد از نوع nvarchar هست، در عمل هر فیلد غیر این رو باید با تابع CAST تبدیل کنیم:
SELECT kalaid , plus , pis , price_sales , CAST(kalaid AS nvarchar(10)) + '@' + pis + '@' + price_sales AS col_details FROM ...
راه دیگه این هست که فیلد col_details رو به صورت یک فیلد calculated با کد بسازیم و به جدول اضافه کنیم:
comboBoxKala_Select.columns.add(new datacolumn("col_details" , typeof(system.string) , "kalaid + '@' + pis + '@' + price_sales"));
البته اینها که گفته شد فقط بخاطر تکمیل بحث و خواسته استارتر محترم تاپیک بود، ولی در عمل نیازی به هیچ کدام از این ها نیست.
کافی هست valuemember رو همون kalaid بگذاریم و خیلی ساده مستقیما از روی datasource کمبوباکس و بر مبنای selectedvalue با یک select به datarow مورد نظر و دیتای اون برسیم:
datarow dr = comboBoxKala_Select.select("kalaid=" + comboBoxKala.selectedvalue.tostring())[0];
نقل قول: دریافت مقدار چند Value از کمبو باکس
سلام مهندسان عزیز
همه موارد رو امتحان کردم و حتی تغییراتی هم دادم ولی اصلا درست نشد
فقط خطا میداد
مشکل حل نشد
نقل قول: دریافت مقدار چند Value از کمبو باکس
شاید این روش که میگم بهینه نباشه اما کار راه انداز هست ، من بودم یه لیست یا حتی combobox زمان اجرا می ساختم ، نتایج کوئری فرضا plus رو به این لیست یا کامبوباکس اضافه می کردم
بعدش از هم از طریق اندیس ها به مقادیر دسترسی داشتم مثلا می دونیم اندیس دوم PIS=32 هست و PLUS = زرد چوبه
نقل قول: دریافت مقدار چند Value از کمبو باکس
ستون قیمت را هم سلکت کنید و مثلا توی selecteditemchanged آیتم انتخابی را به نوع اصلی cast کنید و و از داده هاش استفاده کنید.
یا از بایندینگ استفاده کنید که ساده تر هست.
نقل قول: دریافت مقدار چند Value از کمبو باکس
نقل قول:
نوشته شده توسط
mkmostafa
سلام مهندسان عزیز
همه موارد رو امتحان کردم و حتی تغییراتی هم دادم ولی اصلا درست نشد
فقط خطا میداد
مشکل حل نشد
اون کدهایی که در پست شماره 8 گذاشتم (مربوط به 3 روشی که توضیح دادم) شاید مشکل syntax داشته باشه، ولی قطعا مشکل منطق نداره.
شما کد خودتون رو پیوست نکردین که مشخص بشه کجای کار اشکال دارین و چه چیزی از دستتون در رفته.
بجاش من یک نمونه بر اساس همون مطالب پست 8 میسازم و اینجا پیوست میکنم.
2 ضمیمه
روش 1 : join کردن مقادیر در select query
دیتا نمونه از دیتابیس northwind گرفته شده:
SELECT Products.ProductID,
Products.ProductName,
Categories.CategoryName,
Products.QuantityPerUnit,
Products.UnitPrice,
Products.UnitsInStock,
CAST(Products.QuantityPerUnit AS nvarchar(50))
+ '@' + CAST(Products.UnitPrice AS nvarchar(50))
+ '@' + CAST(Products.UnitsInStock AS nvarchar(50)) AS JoinedInQuery
FROM Products INNER JOIN
Categories ON Products.CategoryID = Categories.CategoryID
ORDER BY Products.ProductID
ضمیمه 153649
ضمیمه 153650
1 ضمیمه
نقل قول: روش 1 : join کردن مقادیر در select query
private void Calculated_Field_In_Select_Query_Load(object sender, EventArgs e)
{
NwindDataSet ds = new NwindDataSet();
NwindDataSetTableAdapters.ProductsTableAdapter ta = new NwindDataSetTableAdapters.ProductsTableAdapter() ;
ta.Fill(ds.Products);
CB_Product.DataSource = ds.Products;
CB_Product.ValueMember = "JoinedInQuery";
CB_Product.DisplayMember = "ProductName";
CB_Product.SelectedIndex = -1;
DGV_Products.DataSource = ds.Products;
}
private void CB_Product_SelectionChangeCommitted(object sender, EventArgs e)
{
string[] a;
a = CB_Product.SelectedValue.ToString().Split('@');
TB_QuantityPerUnit.Text = a[0];
TB_UnitPrice.Text = a[1];
TB_UnitsInStock.Text = a[2];
}
ضمیمه 153651
1 ضمیمه
روش 2 : join کردن مقادیر در یک فیلد calculated در datatable
private void Calculated_Field_In_Datatable_Load(object sender, EventArgs e)
{
NwindDataSet ds = new NwindDataSet();
NwindDataSetTableAdapters.ProductsTableAdapter ta = new NwindDataSetTableAdapters.ProductsTableAdapter();
ta.Fill(ds.Products);
ds.Products.Columns.Add(new DataColumn("CalculatedJoin", typeof(System.String), "QuantityPerUnit + '@' + UnitPrice + '@' + UnitsInStock"));
CB_Product.DataSource = ds.Products;
CB_Product.ValueMember = "CalculatedJoin";
CB_Product.DisplayMember = "ProductName";
CB_Product.SelectedIndex = -1;
DGV_Products.DataSource = ds.Products;
}
private void CB_Product_SelectionChangeCommitted(object sender, EventArgs e)
{
string[] a;
a = CB_Product.SelectedValue.ToString().Split('@');
TB_QuantityPerUnit.Text = a[0];
TB_UnitPrice.Text = a[1];
TB_UnitsInStock.Text = a[2];
}
ضمیمه 153652
1 ضمیمه
روش 3: خوادن مقادیر از datatable
private void Read_Values_From_Datatable_Load(object sender, EventArgs e)
{
NwindDataSetTableAdapters.ProductsTableAdapter ta = new NwindDataSetTableAdapters.ProductsTableAdapter();
ta.Fill(ds.Products);
CB_Product.DataSource = ds.Products;
CB_Product.ValueMember = "ProductId";
CB_Product.DisplayMember = "ProductName";
CB_Product.SelectedIndex = -1;
DGV_Products.DataSource = ds.Products;
}
private void CB_Product_SelectionChangeCommitted(object sender, EventArgs e)
{
DataRow dr = ds.Products.Select("productID=" + CB_Product.SelectedValue.ToString())[0];
TB_QuantityPerUnit.Text = dr["QuantityPerUnit"].ToString();
TB_UnitPrice.Text = dr["UnitPrice"].ToString();
TB_UnitsInStock.Text = dr["UnitsInStock"].ToString();
}
ضمیمه 153653