ソース掲示板




すべてから検索

キーワード   条件 表示 現行ログ 過去ログ トピックス 名前 本文
C# : Odbc 経由のデータベースへの select の結果を DataGrid に表示
日時: 2017/05/23 14:09
名前: lightbox



▼ 販売管理B.mdb のダウンロード


System.Data.Linq を参照します



using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Data;
using System.Data.Linq;
using System.Data.Odbc;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApplication1 {
	/// <summary>
	/// MainWindow.xaml の相互作用ロジック
	/// </summary>
	public partial class MainWindow : Window {

		private OdbcConnection cn = null;
		private ObservableCollection<Syain> syain_list = null;

		public MainWindow() {
			InitializeComponent();
		}

		private void Button_Click_1(object sender, RoutedEventArgs e) {
			Console.WriteLine("クリックされました");

			string cs =
				"Provider=MSDASQL" +
				";Driver={Microsoft Access Driver (*.mdb)}" +
				@";Dbq=..\..\lib\販売管理B.mdb" +
				";";

			string query;
			if ( simei.Text != "") {
				query = String.Format("select * from 社員マスタ where 氏名 like '%{0}%'", simei.Text);
			}
			else {
				query = "select * from 社員マスタ";
			}

			try {
				cn = new OdbcConnection(cs);
				DataContext context = new DataContext(cn);
				syain_list = new ObservableCollection<Syain>(
						context.ExecuteQuery<Syain>(query)
				);
				this.dataGrid.DataContext = syain_list;
			}
			catch (Exception ex) {
				Debug.WriteLine(ex.Message);
			}

			if (cn.State == ConnectionState.Open) {
				cn.Close();
				cn.Dispose();
			}


			// DataGrid にバインド
			dataGrid.DataContext = syain_list;


			// DataGrid にバインドした ObservableCollection 内のデータ
			for (int i = 0; i < syain_list.Count; i++ ) {
				Debug.WriteLine(syain_list[i].社員コード + "|" + syain_list[i].氏名);
			}

		}

		// DataGrid をダブルクリックした時の行データの取得
		private void dataGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e) {
			int row = dataGrid.SelectedIndex;
			if ( row >= 0 ) {
				Syain syain = (Syain)dataGrid.Items.GetItemAt(row);
				Debug.WriteLine(syain.社員コード + "|" + syain.氏名);

				MessageBox.Show(syain.社員コード + "|" + syain.氏名,
					"確認",
					MessageBoxButton.OK,
					MessageBoxImage.Information);
			}
		}

	}
}

メンテナンス

Syain クラス ( No.1 )
日時: 2017/05/23 14:04
名前: lightbox


日時: 2017/05/23 14:04
名前: lightbox
1) int? は、NULL 許容型です。
2) select の結果のすべてを定義する必要はありません
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WpfApplication1 {
	class Syain {
		public string 社員コード { get; set; }
		public string 氏名 { get; set; }

		public string フリガナ { get; set; }
		public string 所属 { get; set; }
		public int 性別 { get; set; }
		public int 給与 { get; set; }
		public int? 手当 { get; set; }
		public string 管理者 { get; set; }
	}
}

このアーティクルの参照用URLをクリップボードにコピー メンテナンス
画面定義 ( No.2 )
日時: 2017/05/23 14:04
名前: lightbox
<Window
	x:Class="WpfApplication1.MainWindow"
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	Title="MainWindow"
	Height="430.769"
	Width="581.953">
	<Grid>
		<Button
			Content="Button"
			HorizontalAlignment="Left"
			Height="24"
			Margin="27,29,0,0"
			VerticalAlignment="Top"
			Width="122"
			Click="Button_Click_1" />
		<DataGrid
			x:Name="dataGrid"
			HorizontalAlignment="Left"
			Height="288"
			Margin="27,78,0,0"
			VerticalAlignment="Top"
			Width="516"
			ItemsSource="{Binding}"
			IsReadOnly="True"
			MouseDoubleClick="dataGrid_MouseDoubleClick" />
		<TextBox
			x:Name="simei"
			HorizontalAlignment="Left"
			Height="24"
			Margin="175,29,0,0"
			TextWrapping="Wrap"
			VerticalAlignment="Top"
			Width="368" />

	</Grid>
</Window>

このアーティクルの参照用URLをクリップボードにコピー メンテナンス