ここでは、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);
}
}
}
}
