PDA

View Full Version : سوال: نحوه ویرایش دو جدول



p30_code
چهارشنبه 01 شهریور 1391, 18:53 عصر
با سلام خدمت دوستان من دو جدول به نام Category و یک جدول Vendor دارم که برای ویرایش با مشکل برخوردم .مشکل به این صورت هست هنگام ویرایش مقادیر ComboBox پر میشود ولی قادر به ویرایش نمی باشد. نام ComboBox به cbcategory تغییر دادم


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Fainal_Project_Eshop
{
public partial class Frm_Edit_vendor : Form
{
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Enter)
SendKeys.Send("{tab}");
return base.ProcessCmdKey(ref msg, keyData);
}
public Frm_Edit_vendor()
{
InitializeComponent();
}

private void btncancel_Click(object sender, EventArgs e)
{
this.Close();
}

private void btnok_Click(object sender, EventArgs e)
{

int ID = Convert.ToInt32(txtid.Text );
ShopModelDataContext db = new ShopModelDataContext();
Vendor Listvendor=(from rows in db.Vendors
where rows.Id==ID
select rows).FirstOrDefault();
Listvendor.Name = txtname.Text;
Listvendor.Tel = Int32.Parse(txttel.Text);
Listvendor.Addres = txtaddres.Text;
Listvendor.CategoryId_Fk = Convert.ToInt32(cbcategory.SelectedValue);
db.SubmitChanges();
this.Close();

}

private void cbcategory_SelectedIndexChanged(object sender, EventArgs e)
{

ShopModelDataContext db = new ShopModelDataContext();
var list = from row in db.Categories

select row;
cbcategory.DisplayMember = "Name";
cbcategory.ValueMember = "Id";
cbcategory.DataSource = list;
}

p30_code
چهارشنبه 01 شهریور 1391, 19:04 عصر
فرم لیست جدول تولید کنندگان

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Fainal_Project_Eshop
{
public partial class Frm_List_Vendor : Form
{
public Frm_List_Vendor()
{
InitializeComponent();
dataGridView1.AutoGenerateColumns = false;
}

private void btnback_Click(object sender, EventArgs e)
{
this.Hide();
Frm_Index l = new Frm_Index();
l.ShowDialog();
}

private void txtserche_TextChanged(object sender, EventArgs e)
{
ShopModelDataContext db = new ShopModelDataContext();
var search_list = from row in db.Vendors
where row.Name.Contains(txtserche.Text)
select row;
dataGridView1.DataSource = search_list;

}

private void Frm_List_Vendor_Load(object sender, EventArgs e)
{
GridList();
}

private void GridList()
{
ShopModelDataContext db = new ShopModelDataContext();
var list = from row in db.Vendors
select row;
dataGridView1.DataSource = list;
}

private void btnadd_Click(object sender, EventArgs e)
{
this.Hide();
Frm_Add_Vendor v = new Frm_Add_Vendor();
v.ShowDialog();
}

private void btnedit_Click(object sender, EventArgs e)
{
int RowID = dataGridView1.CurrentRow.Index;
int VenID = Convert.ToInt32(dataGridView1[0, RowID].Value);
ShopModelDataContext db = new ShopModelDataContext();
Vendor list=(from rows in db.Vendors
where rows.Id==VenID
select rows).FirstOrDefault();
Frm_Edit_vendor ve = new Frm_Edit_vendor();
ve.txtid.Text = list.Id.ToString();
ve.txtname.Text = list.Name;
ve.txttel.Text = list.Tel.ToString();
var Catist = from rows in db.Categories
select rows;
ve.cbcategory.DisplayMember = "Name";
ve.cbcategory.ValueMember = "Id";
ve.cbcategory.DataSource = Catist;
ve.ShowDialog();
GridList();

}

private void btndelet_Click(object sender, EventArgs e)
{
DialogResult dr = MessageBox.Show("آیا برای حذف اطمینان دارد","حذف",MessageBoxButtons.YesNo,MessageBoxIcon.Question);
if (dr == DialogResult.No)
{
return;
}
try
{
int ROWID = dataGridView1.CurrentRow.Index;
int ID = Convert.ToInt32(dataGridView1[0, ROWID].Value);
ShopModelDataContext db = new ShopModelDataContext();
Vendor del = (from rows in db.Vendors
where rows.Id == ID
select rows).FirstOrDefault();
db.Vendors.DeleteOnSubmit(del);
db.SubmitChanges();
GridList();
}
catch
{
Exception me;
}
}
}
}

veniz2008
چهارشنبه 01 شهریور 1391, 19:51 عصر
سلام. کمبوباکس در حالت عادی اگه به خصوصیاتش دست نزده باشی اجازه ویرایش رو میده. مگراینکه منظورتون چیز دیگه ای باشه. یه کم بیشتر توضیح بدید که این کمبو چه نقشی رو در برنامه شما انجام میده.

p30_code
چهارشنبه 01 شهریور 1391, 20:38 عصر
کمبو باکس گروه ها رو نمایش میده ولی روی اولین گروه ثابت هست برای ویرایش می خواهم گروه دیگه رو انتخاب کنم .انتخاب نمیشه اجازه ویراش رو میده ولی اجازه ویرایش به گروه را نمیده.

veniz2008
چهارشنبه 01 شهریور 1391, 22:58 عصر
یعنی چی روی اولین گروه ثابت هست؟ منظورتون اینه که بصورت خودکار گروه مورد نظر رو انتخاب نمیکنه؟ یا اینکه از درون کمبوباکس نمیتونید گزینه ای رو انتخاب کنید؟
خیلی کلی و مبهم توضیح دادی.

hakim22
پنج شنبه 02 شهریور 1391, 09:31 صبح
به نظر من مشکل شما Data Binding است. شما یکی از گزینه های ValueMember یا SelectedValue و ... ها رو درست تنظیم نکردید.
اول Binding های Combobox رو بردارید و دوباره تنظیم کنید مشکل شما حل میشه.

SokooteShab1
پنج شنبه 02 شهریور 1391, 13:49 عصر
Datasource کومبوباکس درست ست شده مشکل اینحاست که این مقدار در رویداد cbcategory_SelectedIndexChanged پر میشه و هر بار که یه مقداری رو از کومبو باکس انتخات میکنید دوباره پرش می کنید و معلومه که در هر پر شدن پیش فرض ایندکس اولش انتخاب میشه.

شما اگر به جای این رویداد در لود Frm_Edit_vendor کومبو باکستون رو پر کنید مشکلتون حل میشه.

private void cbcategory_SelectedIndexChanged(object sender, EventArgs e)
{
}





private void Frm_Edit_vendor_Load(object sender, EventArgs e)
{

ShopModelDataContext db = new ShopModelDataContext();
var list = from row in db.Categories

select row;
cbcategory.DisplayMember = "Name";
cbcategory.ValueMember = "Id";
cbcategory.DataSource = list;

}

p30_code
جمعه 03 شهریور 1391, 20:32 عصر
نه هیچ کدام تون درست به سوالم جواب ندادید. هیچ کس پیدا نمیشه به سوالم درست جواب بده.من تموم این کارهای که شما گفتید قبلا تست کرده بودم.به هر حال ممنونم

veniz2008
جمعه 03 شهریور 1391, 20:53 عصر
مشکل شما اینه که نمیخوای چهار خط توضیح بدی که مشکلت چیه. به جای اینکه 100 خط کد کپی کیند و اینجا بزارید توضیح مناسب بدید که میخواید چه کاری انجام بدید. اگه یه عکس بگیری و همراه توضیحات بذاری دوستان بهتر میتونن کمکتون کنن.

SokooteShab1
جمعه 03 شهریور 1391, 21:07 عصر
ولی من فکر میکنم مشکل از همین جاست. مطمئنی که کد های داخل رویداد SelectedIndexChanged کومبوباکس رو پاک کردی.؟؟

hakim22
شنبه 04 شهریور 1391, 10:55 صبح
این مشکلی هستش که بارها و بارها بهش برخورد میشه دقیقا هم مربوط به Data binding میشه.
در اصل تکنیکی که باید استفاده کنید Complex data binding گفته میشه که برای پر کردن لیستها و کامبوباکسهاست.
اینکه لیستی از داده ها از دیتابیس خونده بشه و مستقیم بیوفته درون یک کامبو کاری است که باید در چند مرحله انجام بشه

چون بیشتر برنامه نویس ها پر کردن داده ها رو به صورت دستی انجام میدهند (Binding سردرد میاره !) این مشکل براشون هیچوقت پیش نمیاد.
به تجربه میدونم که وقتی شما از بارگذاری اتوکاتیک SQL استفاده کنید و هیچ کدی دستی ننویسید اول برنامه آسون پیش میره اما خیلی زود دردسرها شروع میشه

اگر تخصصی مشکل شما رو بررسی کنیم بدون نگاه کردن به کدی که ارسال کردید (که هیچ فایده ای نداره !) باید بگم دوستی که برنامه رو طراحی کرده دوتا مورد رو از قلم انداخته
1- یا دیتابیس رو در چندجای دیگه ی همون فرم خونده و از یک Binding برای اینکار استفاده کرده . اینجوری وقتی مثلا از جدول یکی از رکوردها انتخاب بشن همه ی کنترل ها رو فیلدهای مروبوط به اون رکورد قفل میشوند. (وقتی شما فرم رو با کشیدن و رها کردن از Dataset درست کنید پیش میاد)

2- کامبو باکس خودش به تنها Bind شده ولی گزینه های مختلفی که برای پر کردن دادها باید تنظیم بشه در یک یا چند جا درست تنظیم نشده

دوتا گزینه رو حتما باید دقت کنید.
گزینه ی DisplayMember رو باید روی ستونی تنظیم کنید که میخواهید عینا نمایش بدید
گزینه ی Valumember رو باید روی ستور ID تنظیم کنید.

مثلا اگر کامبو شما لیست مشتری ها رو نمایش میده و جدول مربوطش این دو تا فیلد رو داره
CustomerID و CustomerName

باید CustomerID رو روی ValueMember و
CustomerName رو روی CustomerName
تنظیم کنید.

بقیه ی گزینه های مربوط به Data رو خالی بگذارید.

اگر گزینه ی SelectedValue رو روی فیلد خاصی تنظیم کنید قفل میشه و مشکل جاری شما بوجود میاد . دلیلش هم واضحه !!!!

در اینترت برای مشاهده ی آموزش تصویری اینکارها جستجو کنید. تا تمامی مراحل رو کامل توضیح بده !