PDA

View Full Version : حرفه ای: نحوه مرتبط کردن کمبو باکس های الصاق شده به دیتاگرید متصل به پایگاه داده مربوط به یک جدول



M.sheaikhzadeh
سه شنبه 16 دی 1399, 09:55 صبح
سلام خدمت دوستان و اساتید
برنامه ویندوز فرم ، تحت زبان سی شارپ
کامپوننت مورد استفاده تلریک ، البته اگه بدون تلریک هم شد مشکلی نداره
می خوام یک فرم ورود کالا از دیتابیس بسازم
یک دیتا گرید ویو دارم که توی سطر هاش با استفاده از کمبوباکس می خوام اطلاعات وارد کنم
اطلاعات از دیتابیس توسط linq به کمبوباکس ها متصل شده

یه چیزی مثل تصویر زیر می خوام
152840

مشکل اینجاست که اگه توی ستون کد کالا ، کد کالا بنویسم و اینتر کنم فقط کد کالا میاره و نام کالا خالی میشه اگه نام کالا بنویسم کد کالا خالی میشه و فقط نامش ثبت میشه که طبق منطق برنامه درسته ولی من می خوام وقتی کد کالا ثایپ شد ستون دوم اتوماتیک فقط نام کالای متناظر رو بیاره و بالعکس
152841

این هم کد برنامه ام







using System;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using Telerik.WinControls;
using Telerik.WinControls.Data;
using Telerik.WinControls.UI;

namespace program0
{
public partial class Form9 : Form
{
public Form9()
{
InitializeComponent();
}

linqDataContext db = new linqDataContext();
GridViewMultiComboBoxColumn ProductCode = new GridViewMultiComboBoxColumn("کد کالا");
GridViewMultiComboBoxColumn ProductName = new GridViewMultiComboBoxColumn("نام کالا");
RadMultiColumnComboBoxElement mccbEl = new RadMultiColumnComboBoxElement();

private void Form9_Load(object sender, EventArgs e)
{
var dtpcode = (from a in db.StockProductLists
where a.FiscalYearYear == "1399"
orderby a.ProductCode
select new
{
ProductCode = a.ProductCode,
ProductName = a.ProductName.Replace("ي", "ی").Replace("ك", "ک"),
PackQty = a.PackQty,
OnHandUnitQty = a.OnHandUnitQty,
});
ProductCode.DataSource = dtpcode;
ProductCode.DisplayMember = "ProductCode";
ProductCode.ValueMember = "ProductName";
ProductCode.DropDownStyle = Telerik.WinControls.RadDropDownStyle.DropDown;
ProductCode.FilteringMode = GridViewFilteringMode.DisplayMember;
radGridView1.Columns.Add(ProductCode);

var dtpname = (from a in db.StockProductLists
where a.FiscalYearYear == "1399"
orderby a.ProductCode
select new
{
ProductCode = a.ProductCode,
ProductName = a.ProductName.Replace("ي", "ی").Replace("ك", "ک"),
PackQty = a.PackQty,
OnHandUnitQty = a.OnHandUnitQty,
});
ProductName.DataSource = dtpname;
ProductName.DisplayMember = "ProductName";
ProductName.ValueMember = "ProductCode";
ProductName.DropDownStyle = Telerik.WinControls.RadDropDownStyle.DropDown;
ProductName.FilteringMode = GridViewFilteringMode.DisplayMember;
radGridView1.Columns.Add(ProductName);

radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;

}

private void radGridView1_CellEditorInitialized(object sender, GridViewCellEventArgs e)
{
mccbEl = e.ActiveEditor as RadMultiColumnComboBoxElement;
if (mccbEl != null)
{
mccbEl.Columns[0].HeaderText = "کد کالا";
mccbEl.Columns[1].HeaderText = "نام کالا";
mccbEl.Columns[2].HeaderText = "تعداد جعبه";
mccbEl.Columns[3].HeaderText = "تعداد عدد";
mccbEl.BestFitColumns();
mccbEl.EditorControl.Columns[0].HeaderText = "کد کالا";
mccbEl.DropDownSizingMode = SizingMode.UpDownAndRightBottom;
mccbEl.DropDownMinSize = new Size(550, 300);
mccbEl.DropDownMaxSize = new Size(550, 300);
mccbEl.AutoSizeDropDownToBestFit = false;
mccbEl.DropDownAnimationEnabled = false;
mccbEl.AutoFilter = true;
FilterDescriptor filterDescriptor = new FilterDescriptor(mccbEl.DisplayMember, FilterOperator.Contains, string.Empty);
mccbEl.EditorControl.MasterTemplate.FilterDescript ors.Add(filterDescriptor);
}
}
}
}

M.sheaikhzadeh
شنبه 20 دی 1399, 07:36 صبح
یعنی واقعا کسی نیست که بتونه جواب بنده رو بده ؟؟؟

شاید هم سطح سوالم خیلی تخصصیه که کسی نمیتونه راه حلی پیدا کنه :متفکر:

M.sheaikhzadeh
چهارشنبه 24 دی 1399, 07:30 صبح
و همچنان در انتظار برای پیدا کردن راه حل ....

رامین مرادی
یک شنبه 28 دی 1399, 23:22 عصر
در مورد این سرچ کن ببین چیزی که میخوای هست یا نه
hierarchical

یا مولتیپی کومبو تلریک

اینم ببینید

https://www.telerik.com/blogs/wpf-multicolumncombobox-gridview-column-combobox-and-more


https://docs.telerik.com/devtools/winforms/controls/multicolumncombobox/getting-started

M.sheaikhzadeh
سه شنبه 30 دی 1399, 11:35 صبح
یه تغییراتی دادم ولی یه مشکلی هست وقتی سطر جدید اضافه می کنم کد کالا و نام کالا خالی میشه!:عصبانی++:

using System;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using Telerik.WinControls;
using Telerik.WinControls.Data;
using Telerik.WinControls.UI;

namespace program0
{
public partial class Form9 : Form
{
public Form9()
{
InitializeComponent();
}

linqDataContext db = new linqDataContext();
GridViewMultiComboBoxColumn ProductCode = new GridViewMultiComboBoxColumn("کد کالا");
new GridViewMultiComboBoxColumn ProductName = new GridViewMultiComboBoxColumn("نام کالا");
RadMultiColumnComboBoxElement mccbEl = new RadMultiColumnComboBoxElement();
public IQueryable StockProductList ;
public string FiscalYear = "1399";
public string code;
public string name;
private void Form9_Load(object sender, EventArgs e)
{
StockProductList = (from a in db.StockProductLists
where a.FiscalYearYear == FiscalYear
orderby a.ProductCode
select new
{
ProductCode = a.ProductCode,
ProductName = a.ProductName.Replace("ي", "ی").Replace("ك", "ک"),
QtyPerPack = a.QtyPerPack,
shell = a.OnHandPackQty,
single = a.OnHandUnitQty,
OnHandQty = a.OnHandQty
});


ProductCode.DropDownStyle = Telerik.WinControls.RadDropDownStyle.DropDown;
ProductName.DropDownStyle = Telerik.WinControls.RadDropDownStyle.DropDown;

ProductCode.FilteringMode = GridViewFilteringMode.DisplayMember;
ProductName.FilteringMode = GridViewFilteringMode.DisplayMember;

radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
radGridView1.NewRowEnterKeyMode = RadGridViewNewRowEnterKeyMode.EnterMovesToNextCell ;

radGridView1.Columns.Add(ProductCode);
radGridView1.Columns.Add(ProductName);
radGridView1.Columns.Add("ضریب کالا");
radGridView1.Columns.Add("کارتن");
radGridView1.Columns.Add("عدد");
radGridView1.Columns.Add("تعداد کل");
rbtn_1.Checked = true;
}

private void radGridView1_CellEditorInitialized(object sender, GridViewCellEventArgs e)
{
if (rbtn_0.Checked && e.ColumnIndex == 0)
{
mccbEl = e.ActiveEditor as RadMultiColumnComboBoxElement;
if (mccbEl != null)
{
mccbEl.Columns[0].HeaderText = "کد کالا";
mccbEl.Columns[1].HeaderText = "نام کالا";
mccbEl.Columns[2].HeaderText = "ضریب کالا";
mccbEl.Columns[3].HeaderText = "جعبه";
mccbEl.Columns[4].HeaderText = "عدد";
mccbEl.Columns[5].HeaderText = "تعداد کل";
foreach (GridViewDataColumn column in
mccbEl.Columns)
{
column.BestFit();
}
mccbEl.DropDownSizingMode = SizingMode.UpDownAndRightBottom;
mccbEl.DropDownMinSize = new Size(550, 300);
mccbEl.DropDownMaxSize = new Size(550, 300);
mccbEl.AutoSizeDropDownToBestFit = false;
mccbEl.DropDownAnimationEnabled = false;
mccbEl.AutoFilter = true;
FilterDescriptor filterDescriptor = new FilterDescriptor(mccbEl.DisplayMember, FilterOperator.Contains, string.Empty);
mccbEl.EditorControl.MasterTemplate.FilterDescript ors.Add(filterDescriptor);
mccbEl.TextChanged += MccbEl_TextChanged;
}
}

if (rbtn_1.Checked && e.ColumnIndex == 1)
{
mccbEl = e.ActiveEditor as RadMultiColumnComboBoxElement;
if (mccbEl != null)
{
mccbEl.Columns[0].HeaderText = "کد کالا";
mccbEl.Columns[1].HeaderText = "نام کالا";
mccbEl.Columns[2].HeaderText = "ضریب کالا";
mccbEl.Columns[3].HeaderText = "جعبه";
mccbEl.Columns[4].HeaderText = "عدد";
mccbEl.Columns[5].HeaderText = "تعداد کل";
foreach (GridViewDataColumn column in
mccbEl.Columns)
{
column.BestFit();
}
mccbEl.DropDownSizingMode = SizingMode.UpDownAndRightBottom;
mccbEl.DropDownMinSize = new Size(550, 300);
mccbEl.DropDownMaxSize = new Size(550, 300);
mccbEl.AutoSizeDropDownToBestFit = false;
mccbEl.DropDownAnimationEnabled = false;
mccbEl.AutoFilter = true;
FilterDescriptor filterDescriptor = new FilterDescriptor(mccbEl.DisplayMember, FilterOperator.Contains, string.Empty);
mccbEl.EditorControl.MasterTemplate.FilterDescript ors.Add(filterDescriptor);
mccbEl.TextChanged += MccbEl_TextChanged;
}
}
}

private void MccbEl_TextChanged(object sender, EventArgs e)
{
if (mccbEl != null)
{
radGridView2.DataSource = mccbEl.DataSource;
if (radGridView2.RowCount > 0)
{
radGridView2.Columns[0].HeaderText = "کد کالا";
radGridView2.Columns[1].HeaderText = "نام کالا";
radGridView2.Columns[2].HeaderText = "ضریب کالا";
radGridView2.Columns[3].HeaderText = "جعبه";
radGridView2.Columns[4].HeaderText = "عدد";
radGridView2.Columns[5].HeaderText = "تعداد کل";
foreach (GridViewDataColumn column in
radGridView2.Columns)
{
column.BestFit();
}
radGridView2.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
}
}
}


private void radGridView1_UserAddingRow(object sender, GridViewRowCancelEventArgs e)
{
if (radGridView2.RowCount > 0)
{
int zarib = Convert.ToInt32(radGridView2.CurrentRow.Cells[2].Value.ToString());
int carton1 = Convert.ToInt32(radGridView2.CurrentRow.Cells[3].Value.ToString());
int add1 = Convert.ToInt32(radGridView2.CurrentRow.Cells[4].Value.ToString());
int total1= Convert.ToInt32(radGridView2.CurrentRow.Cells[5].Value.ToString());

if (e.Rows[0].Cells[3].Value == null)
{
e.Rows[0].Cells[3].Value = 0;
}
if (e.Rows[0].Cells[4].Value == null)
{
e.Rows[0].Cells[4].Value = 0;
}
int carton = Convert.ToInt32(e.Rows[0].Cells[3].Value.ToString());
int add = Convert.ToInt32(e.Rows[0].Cells[4].Value.ToString());
int total = carton * zarib + add;

if (add == zarib)
{
add = 0;
carton++;
}
else if (add > zarib)
{
carton = carton + add / zarib;
add = add % zarib;
}
e.Rows[0].Cells[0].Value = code;
e.Rows[0].Cells[1].Value = name;
e.Rows[0].Cells[2].Value = zarib.ToString();
e.Rows[0].Cells[3].Value = carton;
e.Rows[0].Cells[4].Value = add;
e.Rows[0].Cells[5].Value = total;

if (total <= total1)
{
e.Cancel = false;
}
else
{
e.Cancel = true;
}
}
else
{
e.Cancel = true;
}
}

private void rbtn_0_CheckedChanged(object sender, EventArgs e)
{
if (rbtn_0.Checked)
{
ProductCode.DataSource = StockProductList;
ProductCode.DisplayMember = "ProductCode";
ProductCode.ValueMember = "ProductName";

}
if (rbtn_1.Checked)
{
ProductName.DataSource = StockProductList;
ProductName.DisplayMember = "ProductName";
ProductName.ValueMember = "ProductCode";
}
}
}
}



152927