ورود

View Full Version : سوال: نمایش دو جدول در DataGrid توسط Table Adapter



rezaprogrammer
شنبه 27 آبان 1391, 01:49 صبح
سلام. من میخام اطلاعات دو جدول پایگاه داده در یک DataGridview قابل مشاهده باشه و در عین حال بشه از چهار Command مربوط به DataAdapter یا TableAdapter استفاده کرد. راهی هست؟
استفاده از Inner Join باعث غیر فعال شدن Commandهای ویرایشی میشه. لطفاً راهنمایی بفرمایید.

mhq1368
شنبه 27 آبان 1391, 11:58 صبح
سلام
شما باید یه همچین کدی رو براساس پروژتون بنویسید

SqlDataAdapter da1 = new SqlDataAdapter("select tbl1.id,tbl1.name,tbl1.family,tbl2.number1 from tbl1,tbl2 where tbl1.id=tbl2.id", con);
da1.Fill(ds, "view");
dataGridView2.DataSource = ds.Tables["view"];
dataGridView2.Columns["id"].HeaderText = "????";
dataGridView2.Columns["name"].HeaderText = "???";
dataGridView2.Columns["family"].HeaderText = "??? ????????";
dataGridView2.Columns["number1"].HeaderText = "????? ???? ";



من در فرم لود امتحانش کردم جواب داد

rezaprogrammer
شنبه 27 آبان 1391, 14:10 عصر
سلام
شما باید یه همچین کدی رو براساس پروژتون بنویسید

SqlDataAdapter da1 = new SqlDataAdapter("select tbl1.id,tbl1.name,tbl1.family,tbl2.number1 from tbl1,tbl2 where tbl1.id=tbl2.id", con);
da1.Fill(ds, "view");
dataGridView2.DataSource = ds.Tables["view"];
dataGridView2.Columns["id"].HeaderText = "????";
dataGridView2.Columns["name"].HeaderText = "???";
dataGridView2.Columns["family"].HeaderText = "??? ????????";
dataGridView2.Columns["number1"].HeaderText = "????? ???? ";



من در فرم لود امتحانش کردم جواب داد

سلام. ممنونم از پاسخگوییت. متاسفانه DataAdapter قبول نمی کنه. از نظر ماهیتی هیچ فرقی با Inner Join نداره. حتی این دستور شما خود بخود توسط Query Builder مربوط به Visaul Studio تبدیل میشه به Inner Join

SELECT Customers.CustomerId, Customers.CustomerName, Customers.CustomerGroupId,
Customers.Tel, Customers.Fax, Customers.Mobile, Customers.Address,
Customers.CustomerType, Customers.Description, Accounts.AccountCode
FROM (Customers INNER JOIN
Accounts ON Customers.CustomerId = Accounts.CustomerId)

mhq1368
شنبه 27 آبان 1391, 16:38 عصر
جالبه ،.......،خیلی خیلی جالبه

من خودم دارم از این کد ها استفاده میکنم نمیدونم والا چی بگم

rezaprogrammer
شنبه 27 آبان 1391, 16:53 عصر
جالبه ،.......،خیلی خیلی جالبه

من خودم دارم از این کد ها استفاده میکنم نمیدونم والا چی بگم

شما کارهای ویرایشی رو با DataAdapter یا TableAdapter انجام میدید؟ جواب میده؟
ولی برای من پیغام میده که این سیستم ساپورت نمیشه

توجه کنید منظورم خواندن اطلاعات نیست. اطلاعات رو می تونه بخونه. ولی کدهای ویرایشی مثل (افزودن، بروز رسانی و حذف) کار نمی کنند

mhq1368
شنبه 27 آبان 1391, 20:02 عصر
من با dataadapter انجام میدم جواب میده هیچ مشکلی نداره

مثلا برای اضافه کردن اطلاعات از کد زیر استفاده میکنم



ds.Clear();
com = new SqlCommand("Insert Into regkarmand values('" + TextBox2.Text + "','" + TextBox3.Text + "')", con);

com.ExecuteNonQuery();
da = new SqlDataAdapter("select * from regkarmand", con);
da.Fill(ds, "regkarmand");
da.Update(ds, "regkarmand");
con.Close();
num = int.Parse(TextBox1.Text);
TextBox1.Text = Convert.ToString(num + 1);
cl();

rezaprogrammer
شنبه 27 آبان 1391, 23:20 عصر
من با dataadapter انجام میدم جواب میده هیچ مشکلی نداره

مثلا برای اضافه کردن اطلاعات از کد زیر استفاده میکنم



ds.Clear();
com = new SqlCommand("Insert Into regkarmand values('" + TextBox2.Text + "','" + TextBox3.Text + "')", con);

com.ExecuteNonQuery();
da = new SqlDataAdapter("select * from regkarmand", con);
da.Fill(ds, "regkarmand");
da.Update(ds, "regkarmand");
con.Close();
num = int.Parse(TextBox1.Text);
TextBox1.Text = Convert.ToString(num + 1);
cl();


ببین. به صورت دستی میشه به DataAdapter و TableAdapter اضافه کرد. ولی TableAdapter نمی تونه با Inner Join دستورات ویرایشی رو به صورت اتوماتیک اضافه کنه. مجبوریم دستی اضافه کنیم که وقت گیره و امکان اشتباه هست خصوصاً اینکه کدی که توی TableAdapter اتوماتیک اضافه میشه حرفه ایه و کاربردش بیشتره. مثل نمونه زیر برای Update:

UPDATE CustomerGroups
SET CustomerGroupName = ?, Description = ?, IsDefault = ?
WHERE (CustomerGroupId = ?) AND (? = 1) AND (CustomerGroupName IS NULL) AND (? = 1) AND (Description IS NULL) AND (? = 1) AND (IsDefault IS NULL) OR
(CustomerGroupId = ?) AND (? = 1) AND (CustomerGroupName = ?) AND (? = 1) AND (Description IS NULL) AND (IsDefault IS NULL) OR
(CustomerGroupId = ?) AND (? = 1) AND (CustomerGroupName IS NULL) AND (? = 1) AND (Description = ?) AND (IsDefault IS NULL) OR
(CustomerGroupId = ?) AND (? = 1) AND (CustomerGroupName = ?) AND (Description = ?) AND (IsDefault IS NULL) OR
(CustomerGroupId = ?) AND (? = 1) AND (CustomerGroupName IS NULL) AND (? = 1) AND (Description IS NULL) AND (IsDefault = ?) OR
(CustomerGroupId = ?) AND (? = 1) AND (CustomerGroupName = ?) AND (Description IS NULL) AND (IsDefault = ?) OR
(CustomerGroupId = ?) AND (? = 1) AND (CustomerGroupName IS NULL) AND (Description = ?) AND (IsDefault = ?) OR
(CustomerGroupId = ?) AND (CustomerGroupName = ?) AND (Description = ?) AND (IsDefault = ?)

در مورد DataAdapter هم اگه بخوایم از CommandBuilder اضافه کنیم پیغام خطا میده برای Inner Join ساپورت نمیشه. حال میخام از دستوری استفاده کنم که بیش از یک جدول رو قبول کنه و بشه از کامندهای ویرایشی هم به راحتی استفاده کرد.95142