نمایش نتایج 1 تا 16 از 16

نام تاپیک: دریافت مقدار چند Value از کمبو باکس

  1. #1

    دریافت مقدار چند Value از کمبو باکس

    سلام
    کمبوباکس توسط جدول زیر پر میشه :
    1.PNG

    کد پرشدن کمبوباکس :
                comboBoxKala.DataSource = _db.comboBoxKala_Select();
    comboBoxKala.DisplayMember = "plus";
    comboBoxKala.ValueMember = "KalaId";


    حالا میخوام هر وقت کاربر یکی از ایتم های کمبوباکس رو انتخاب کنه مقادیر ستون pis و Price_Sales در مقادیری ریخته بشه؟؟؟
    مثلا کاربر زردچوبه رو انتخاب می کنه و باید مقادیر 32 و 14000 در متغیری ریخته بشه که هدفم هم این هست که موجودی و قیمت فروش همان لحظه به کاربر در تکس باکسی نمایش
    داده بشه

    خیلی ممنون راهنمایی بفرمایید

  2. #2
    کاربر دائمی آواتار Hossis
    تاریخ عضویت
    آبان 1386
    محل زندگی
    بیرجند
    پست
    1,731

    نقل قول: دریافت مقدار چند Value از کمبو باکس

    این مشکل فقط یک راه داره
    و اونم اینه که از کامبوباکس DevComponent استفاده کنید که هر آیتم، یک کلید و یک مقدار (نام و تکست و تگ و تولتیپ داره و هریک از این مقادیر رو می تونید به یکی از ستون های جدول اختصاص بدید)

  3. #3
    کاربر دائمی آواتار group45
    تاریخ عضویت
    مرداد 1388
    محل زندگی
    کرمان
    سن
    36
    پست
    549

    نقل قول: دریافت مقدار چند Value از کمبو باکس

    سلام
    شما ار datagridview استفاده کن

  4. #4

    نقل قول: دریافت مقدار چند Value از کمبو باکس

    چند سال پیش از این روش استفاده کرده بودم ولی الان یادم رفته
    نیازی هم به دیتاگریدویو نیست.
    کمبوباکس رو اسپلیت میکرد و مثلا split1 داخلش مقدار صفر ستون کمبوباکس بریزه ، برای split2 مقدار یک ستون کمبوباکس رو بریزه و همینجوری به ازای هر ستون در کمبوباکس یک split میزاشتم
    حالا اگر مهندسان عزیز ، کد کاملش رو برام بزارن ، ممنون میشم

  5. #5
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,044

    نقل قول: دریافت مقدار چند Value از کمبو باکس

    نقل قول نوشته شده توسط Hossis مشاهده تاپیک
    این مشکل فقط یک راه داره
    و اونم اینه که از کامبوباکس DevComponent استفاده کنید که هر آیتم، یک کلید و یک مقدار (نام و تکست و تگ و تولتیپ داره و هریک از این مقادیر رو می تونید به یکی از ستون های جدول اختصاص بدید)
    البته اگر قرار به استفاده از کمپوننت های devex باشه کنترل های lookupedit (grid یا search) بمراتب انتخاب های بهتری هستن.

  6. #6
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,044

    نقل قول: دریافت مقدار چند Value از کمبو باکس

    نقل قول نوشته شده توسط mkmostafa مشاهده تاپیک
    چند سال پیش از این روش استفاده کرده بودم ولی الان یادم رفته
    نیازی هم به دیتاگریدویو نیست.
    کمبوباکس رو اسپلیت میکرد و مثلا split1 داخلش مقدار صفر ستون کمبوباکس بریزه ، برای split2 مقدار یک ستون کمبوباکس رو بریزه و همینجوری به ازای هر ستون در کمبوباکس یک split میزاشتم
    حالا اگر مهندسان عزیز ، کد کاملش رو برام بزارن ، ممنون میشم
    1- شما میتونین کمبوباکس رو به همون روش معمولی استفاده کنین و بعد در رخداد selectedindexchanged یا selectedvaluechanged بر اساس value از همون دیتاتیبل که کمبو رو پر کردین هر مقداری که لازم دارین بخونین.
    2- اون مورد split که اشاره کردین:
    میتونین value member رو بجای kalaid با join ستونهای مورد نیاز پر کنین (جدا کننده فیلدها باید کارآکتری باشه که مطمئن هستین در هیچ فیلدی ظاهر نمیشه)
    بعد در همین رخدادهایی که گفته شد value رو split کنین.

  7. #7

    نقل قول: دریافت مقدار چند Value از کمبو باکس

    احسنت! من هم همین رو میخوام.
    کدش رو میتونید برام بزارید.
    یک مثال در مورد کمبوباکس بزارید
    خیلی ممنون ، مهندس عزیز.

  8. #8
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,044

    نقل قول: دریافت مقدار چند 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];
    آخرین ویرایش به وسیله Mahmoud.Afrad : شنبه 18 دی 1400 در 08:08 صبح

  9. #9

    نقل قول: دریافت مقدار چند Value از کمبو باکس

    سلام مهندسان عزیز
    همه موارد رو امتحان کردم و حتی تغییراتی هم دادم ولی اصلا درست نشد
    فقط خطا میداد
    مشکل حل نشد

  10. #10

    نقل قول: دریافت مقدار چند Value از کمبو باکس

    شاید این روش که میگم بهینه نباشه اما کار راه انداز هست ، من بودم یه لیست یا حتی combobox زمان اجرا می ساختم ، نتایج کوئری فرضا plus رو به این لیست یا کامبوباکس اضافه می کردم
    بعدش از هم از طریق اندیس ها به مقادیر دسترسی داشتم مثلا می دونیم اندیس دوم PIS=32 هست و PLUS = زرد چوبه

  11. #11

    نقل قول: دریافت مقدار چند Value از کمبو باکس

    ستون قیمت را هم سلکت کنید و مثلا توی selecteditemchanged آیتم انتخابی را به نوع اصلی cast کنید و و از داده هاش استفاده کنید.

    یا از بایندینگ استفاده کنید که ساده تر هست.

  12. #12
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,044

    نقل قول: دریافت مقدار چند Value از کمبو باکس

    نقل قول نوشته شده توسط mkmostafa مشاهده تاپیک
    سلام مهندسان عزیز
    همه موارد رو امتحان کردم و حتی تغییراتی هم دادم ولی اصلا درست نشد
    فقط خطا میداد
    مشکل حل نشد
    اون کدهایی که در پست شماره 8 گذاشتم (مربوط به 3 روشی که توضیح دادم) شاید مشکل syntax داشته باشه، ولی قطعا مشکل منطق نداره.

    شما کد خودتون رو پیوست نکردین که مشخص بشه کجای کار اشکال دارین و چه چیزی از دستتون در رفته.

    بجاش من یک نمونه بر اساس همون مطالب پست 8 میسازم و اینجا پیوست میکنم.

  13. #13
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,044

    روش 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


    4.png

    6.png

  14. #14
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,044

    نقل قول: روش 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];
    }


    1.jpg

  15. #15
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,044

    روش 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];
    }


    2.jpg

  16. #16
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,044

    روش 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();
    }


    3.jpg

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •