ここでは、CodePlexのWPF Toolkitに含まれているDataGridの使い方の一例を示しています。
まず参照設定で次の2つを加えておきます。
1.WPFToolkit
2.System.Windows.Controls.DataVisualization.Toolkit
コツとしては、XAMLでDataGridのAutoGenerateColumns属性をTrueにしておくことです。
WPF ToolkitのDownloadサイト http://wpf.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=29117
XAMLは次のようになります。
<window x:class="WPF.Window4" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit" title="Window4" height="300" width="300"> <stackpanel> <my:datagrid x:name="dataGrid1" autogeneratecolumns="True" itemssource="{Binding}"></my:datagrid> <button height="23" horizontalalignment="Left" name="button1" verticalalignment="Top" width="75" click="button1_Click">Button</button> </stackpanel> </window>
コードのほうは以下のようになります。
namespace WPF { /// <summary> /// Window4.xaml の相互作用ロジック /// </summary> public partial class Window4 : Window { SqlConnectionStringBuilder connBldr = new SqlConnectionStringBuilder(); DataTable dt = new DataTable(); SqlDataAdapter sda = new SqlDataAdapter(); public Window4() { InitializeComponent(); //データベースに接続する connBldr.DataSource = @".\SQLExpress"; connBldr.InitialCatalog = "pubs"; connBldr.IntegratedSecurity = true; SqlConnection conn = new SqlConnection(connBldr.ConnectionString); SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandText = "SELECT fname,lname FROM employee"; sda.SelectCommand = cmd; //UPDATEのSQL文だけを作成しています。INSERTとDELETEは省いております。 SqlCommand updateCmd = new SqlCommand(); updateCmd.CommandText = "UPDATE employee SET fname = @new_fname,lname = @new_lname WHERE fname = @old_fname AND lname = @old_lname"; updateCmd.Parameters.Add(new SqlParameter("@new_fname", SqlDbType.VarChar, 0, ParameterDirection.Input,false,0,0,"fname",DataRowVersion.Current,"")); updateCmd.Parameters.Add(new SqlParameter("@old_fname", SqlDbType.VarChar, 0, ParameterDirection.Input, false, 0, 0, "fname", DataRowVersion.Original, "")); updateCmd.Parameters.Add(new SqlParameter("@new_lname", SqlDbType.VarChar, 0, ParameterDirection.Input, false, 0, 0, "lname", DataRowVersion.Current, "")); updateCmd.Parameters.Add(new SqlParameter("@old_lname", SqlDbType.VarChar, 0, ParameterDirection.Input, false, 0, 0, "lname", DataRowVersion.Original, "")); sda.UpdateCommand = updateCmd; sda.Fill(dt); //DataGridとデータをリンク付けします。 this.dataGrid1.DataContext = dt; } private void button1_Click(object sender, RoutedEventArgs e) { using (SqlConnection conn = new SqlConnection(connBldr.ConnectionString)) { //UPDATEだけ作成していたので、UPDATEだけにコネクションを関連付けます。 sda.UpdateCommand.Connection = conn; sda.Update(dt); } } } }