WPF DataGrid 控件的运用
2017-02-24 01:35
344 查看
WPF DataGrid 控件的运用
运行环境:Window7 64bit,.NetFramework4.61,C# 6.0; 编者:乌龙哈里 2017-02-23
参考:
King Cobra 博客
流泉飞石 博客
董辉 百度知道答题
章节:
添加列和数据源
选择单位设置
自动添加行号
Enter 键做成 Tab 键的效果
同步更新数据源
在选中 Cell 所在行上插入新行或删除选中 Cell 的所在行
获取选中单元格的值
正文:
一、添加列和数据源:
我们往一个 DataGrid 中添加数据源 List< int[] >,注意要在 XAML 代码中把自动添加列的属性给设成 False, AutoGenerateColumns="False" 。
示例1:
C# 代码片段:
List<int[]> list = new List<int[]>();
list.Add(new int[] { 1, 2, 3, 4, 5 });
list.Add(new int[] { 2, 3, 4, 5, 6 });
list.Add(new int[] { 3, 4, 5, 6, 7 });
int _col = list[0].Length;
int _row = list.Count;
for (int i = 0; i < _col; i++)
{
dtgShow.Columns.Add(new DataGridTextColumn
{
Width = (Width - 30) / _col,
Header = $"{(char)(65+i)}",
Binding=new Binding($"[{i.ToString()}]")
});
}
dtgShow.ItemsSource = list;
前端 XAML 片段:
<DataGrid Name="dtgShow" AutoGenerateColumns="False" Margin="3" Grid.Row="0" Grid.ColumnSpan="2"/>
View Code
运行环境:Window7 64bit,.NetFramework4.61,C# 6.0; 编者:乌龙哈里 2017-02-23
参考:
King Cobra 博客
流泉飞石 博客
董辉 百度知道答题
章节:
添加列和数据源
选择单位设置
自动添加行号
Enter 键做成 Tab 键的效果
同步更新数据源
在选中 Cell 所在行上插入新行或删除选中 Cell 的所在行
获取选中单元格的值
正文:
一、添加列和数据源:
我们往一个 DataGrid 中添加数据源 List< int[] >,注意要在 XAML 代码中把自动添加列的属性给设成 False, AutoGenerateColumns="False" 。
示例1:
C# 代码片段:
List<int[]> list = new List<int[]>();
list.Add(new int[] { 1, 2, 3, 4, 5 });
list.Add(new int[] { 2, 3, 4, 5, 6 });
list.Add(new int[] { 3, 4, 5, 6, 7 });
int _col = list[0].Length;
int _row = list.Count;
for (int i = 0; i < _col; i++)
{
dtgShow.Columns.Add(new DataGridTextColumn
{
Width = (Width - 30) / _col,
Header = $"{(char)(65+i)}",
Binding=new Binding($"[{i.ToString()}]")
});
}
dtgShow.ItemsSource = list;
前端 XAML 片段:
<DataGrid Name="dtgShow" AutoGenerateColumns="False" Margin="3" Grid.Row="0" Grid.ColumnSpan="2"/>
using System.Collections.Generic; using System.Collections.ObjectModel; using System.Data; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Input; namespace 学习WpfDataGrid1 { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { List<int[]> list = new List<int[]>(); ObservableCollection<int[]> showdata = new ObservableCollection<int[]>(); public MainWindow() { InitializeComponent(); AddSource(); GetComboBoxSource(); GetShowData(); } //---原始数据源到显示数据源 private void GetShowData() { showdata.Clear(); foreach (var a in list) { showdata.Add(a); } dtgShow.ItemsSource = showdata; } //---显示数据到原始数据 private void GetRawData() { list.Clear(); foreach (var a in showdata) { list.Add(a); } } //---添加 ComboBox 数据源 private void GetComboBoxSource() { //cbbSelectMode 为 ComboBox 控件实例 cbbSelectMode.Items.Add(DataGridSelectionUnit.Cell); cbbSelectMode.Items.Add(DataGridSelectionUnit.FullRow); cbbSelectMode.Items.Add(DataGridSelectionUnit.CellOrRowHeader); cbbSelectMode.SelectedIndex = 2; } //---DataGrid 选择方式 private void cbbSelectMode_SelectionChanged(object sender, SelectionChangedEventArgs e) { dtgShow.SelectionUnit = (DataGridSelectionUnit)cbbSelectMode.SelectedValue; } //---添加 DataGrid 数据源 private void AddSource() { list.Add(new int[] { 1, 2, 3, 4, 5 }); list.Add(new int[] { 2, 3, 4, 5, 6 }); list.Add(new int[] { 3, 4, 5, 6, 7 }); int _col = list[0].Length; //int _row = list.Count; for (int i = 0; i < _col; i++) { dtgShow.Columns.Add(new DataGridTextColumn { Width = (Width - 38) / _col, Header = $"{(char)(65 + i)}", Binding = new Binding($"[{i.ToString()}]") }); } } //---自动添加行号 private void dtgShow_LoadingRow(object sender, DataGridRowEventArgs e) { e.Row.Header = e.Row.GetIndex() + 1; } //---Enter 达到 Tab 的效果 private void dtgShow_PreviewKeyDown(object sender, KeyEventArgs e) { var uie = e.OriginalSource as UIElement; if (e.Key == Key.Enter) { uie.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next)); e.Handled = true; } } //---给lbxData(ListBox) 添加数据 private void GetListBoxSource() { lbxData.Items.Clear(); StringBuilder sb = new StringBuilder(); foreach (var a in list) { sb.Clear(); foreach (var b in a) { sb.Append(b.ToString()); sb.Append(" "); } lbxData.Items.Add(sb.ToString()); } } //---切换 DataGrid 和 ListBox private void chkResult_Click(object sender, RoutedEventArgs e) { CheckBox chk = (CheckBox)sender; if (chk.IsChecked == true) { dtgShow.Visibility = Visibility.Hidden; lbxData.Visibility = Visibility.Visible; GetRawData(); GetListBoxSource(); } else { lbxData.Visibility = Visibility.Hidden; dtgShow.Visibility = Visibility.Visible; GetShowData(); } } //增加新行 private void btnAppend_Click(object sender, RoutedEventArgs e) { showdata.Add(new int[dtgShow.Columns.Count]); } //删除末行 private void btnRemoveLast_Click(object sender, RoutedEventArgs e) { if (showdata.Count > 0) { showdata.RemoveAt(showdata.Count - 1); } } //---取得选中 Cell 所在的行列 private bool GetCellXY(DataGrid dg, ref int rowIndex, ref int columnIndex) { var _cells = dg.SelectedCells; if (_cells.Any()) { rowIndex = dg.Items.IndexOf(_cells.First().Item); columnIndex = _cells.First().Column.DisplayIndex; return true; } return false; } //在选中 Cell 所在行上插入新行 private void btnInsert_Click(object sender, RoutedEventArgs e) { int _rowIndex = 0; int _columnIndex = 0; if (GetCellXY(dtgShow, ref _rowIndex, ref _columnIndex)) { showdata.Insert(_rowIndex, new int[dtgShow.Columns.Count]); } } //删除选中 Cell 所在行 private void btnRemoveSelect_Click(object sender, RoutedEventArgs e) { int _rowIndex = 0; int _columnIndex = 0; if (GetCellXY(dtgShow, ref _rowIndex, ref _columnIndex)) { showdata.RemoveAt(_rowIndex); } } //---获取所有的选中cell 的值 private string GetSelectedCellsValue(DataGrid dg) { var cells = dg.SelectedCells; StringBuilder sb = new StringBuilder(); if (cells.Any()) { foreach(var cell in cells) { sb.Append((cell.Column.GetCellContent(cell.Item) as TextBlock).Text); sb.Append(" "); } } return sb.ToString(); } //---显示选中单元格的值 private void dtgShow_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e) { tbxSelect.Text = GetSelectedCellsValue(dtgShow); } } }
View Code
相关文章推荐
- WPF 4 DataGrid 控件(基本功能篇)
- wpf 中DataGrid 控件的样式设置及使用
- WPF 4 DataGrid 控件 (基本功能篇)
- WPF 4 DataGrid 控件(自定义样式篇)
- WPF 4 DataGrid 控件(进阶篇一)
- 在WPF中获取DataGridTemplateColumn模板定义的内容控件
- WPF中控件ListView和DataGrid典型属性介绍
- WPF 设置ComboBox控件的数据源当ComboBox用来作为DataGrid的某列的编辑控件时
- 在WPF中获取DataGridTemplateColumn模板定义的内容控件
- WPF 4 DataGrid 控件(进阶篇二)
- WPF中。。DataGrid 实现时间控件和下拉框控件
- WPF 中获取DataGrid 模板列中控件的对像
- Silverlight/wpf DataGrid TextBox 等控件内容 Binding 中日期格式 StringFormat
- WPF 4 DataGrid 控件(基本功能篇)
- WPF 4 DataGrid 控件(自定义样式篇)
- WPF中DataGrid控件内Button的Command和CommandParameter的绑定
- WPF 4 DataGrid 控件(自定义样式篇)
- Silverlight/wpf DataGrid TextBox 等控件内容 Binding 中日期格式 StringFormat
- WPF 4 DataGrid 控件(进阶篇一)
- WPF DataGrid 控件默认空白行无法显示