2013-06-23 21 views
0

現在我正在製作一個C#winForm,並且我必須使用網格來顯示從兩個表中檢索的數據供用戶編輯。使用datagridview在c#winform中顯示2個表的數據更新

表格如下。

學生表:

id int 
name char(10) 

主題表:

id int 
name char(10) 

studentsubject表:

id int (Pri key, AUTO_INCREMENT) 
student_id int 
subject_id int 
mark int 

在WinForm該網格將表現出一定的學生,例如受試者ID = 12345,具有以下SQL:

select studentsubject.id, subject.name, studentsubject.mark 
from subject, studentsubject 
where studentsubject.student_id = 12345 
and studentsubject.subject_id = subject.id 

這個數據retrived放入一個數據集,然後放入一個網格與所述第一柱(studentsubject.id)是隱藏的。

我使用datagridview來做到這一點,並且可以讓用戶更改標記,爲新主題添加新行並通過刪除datagridview中的行來刪除主題。

但問題是如何使數據從網格更改回數據庫。

我應該用datagrid來做嗎?

THX

+0

http://stackoverflow.com/questions/16009857/asp-net-how-to-update-a-database-from-a-gridview-c-尖銳 – Kzest

回答

0

這裏有UPDATE,INSERT和DELETE對應您的要求的命令:

update studentsubject 
set mark = @mark 

insert into [subject] (name) 
values (@name); 
insert into studentsubject (student_id, subject_id, mark) 
values (1, @@identity, @mark) 

declare @subject_id int; 
select @subject_id = subject_id 
from studentsubject 
where id = @id; 
delete from studentsubject 
where id = @id; 
delete from [subject] 
where id = @subject_id 

我建議你進行使用SqlDataAdapter,becaues它可以自動決定執行基於該操作的更新一個DataRow的狀態。您所需要的只是執行SqlDataAdapter.Update方法。當然,必須分配SqlDataAdapter.DeleteCommandSqlDataAdapter.InsertCommandSqlDataAdapter.UpdateCommand屬性。

這裏是一個代碼段:

adapter.InsertCommand = connection.CreateCommand(); 
adapter.InsertCommand.CommandText = "insert into [subject] (name) values (@name); insert into studentsubject (student_id, subject_id, mark) values (1, @@identity, @mark)"; 
adapter.InsertCommand.Parameters.AddRange(new SqlParameter[] { 
    new SqlParameter("@name", SqlDbType.Char, 10, "name"), 
    new SqlParameter("@mark", SqlDbType.Int, 1, "mark") 
}); 
adapter.UpdateCommand = connection.CreateCommand(); 
adapter.UpdateCommand.CommandText = "update studentsubject set mark = @mark"; 
adapter.UpdateCommand.Parameters.Add("@mark", SqlDbType.Int, 1, "mark"); 
adapter.DeleteCommand = connection.CreateCommand(); 
adapter.DeleteCommand.CommandText = "declare @subject_id int; select @subject_id = subject_id from studentsubject where id = @id; delete from studentsubject where id = @id; delete from [subject] where id = @subject_id"; 
adapter.DeleteCommand.Parameters.Add("@id", SqlDbType.Int, int.MaxValue, "id"); 
相關問題