WPF Datagrid绑定到DataTable和TextBox样式后面的代码

时间:2017-10-15 20:50:01

标签: wpf datatable datagrid textbox textblock

我必须在DataGrid中显示一组数据,其列样式为ComboBox或TextBlock。 DataGrid绑定到DataTable。 DataTable中每列的数量和位置是在运行时定义的,因此我以编程方式创建DataGrid。 只要我使用DataGridTextColumn并保留默认样式(TextBlock),一切都很好,而如果我尝试将DataGridTextColumn更改为TextBox样式,则会出现类型错误。 关于ComboBox的问题没有问题,所以我以后只粘贴代码的DataGridTextColumn部分(对于单个DataGrid单元格):

C#

// Create the DataTable that will contain real-time data
public DataTable CurrentTable { get; set; }

// Binding string
string stringA = "some_string_A";

// Create new binding
Binding b = new Binding(stringA);
b.Mode = BindingMode.TwoWay;

// Create a new TextColumn
DataGridTextColumn dgCol = new DataGridTextColumn();

//dgCol.ElementStyle = new Style(typeof(TextBox)); <- this row generates error

// Set the column binding for the new TextColumn
dgCol.Binding = b;

// Add the TextColumn to the DataGrid
datagrid.Columns.Add(dgCol);

// Create a new row in the DataTable
var colDataTable = CurrentTable.NewRow();

// Populate column "stringA" of the new row
colDataTable[stringA]="some_string_B";

// Add the row to DataTable
CurrentTable.Rows.Add(colDataTable);

// Finally bind DataGrid to DataTable
datagrid.ItemsSource = CurrentTable.AsDataView();

XAML

<DataGrid x:Name="datagrid" ItemsSource="{Binding CurrentTable}" CanUserAddRows="True" />

我试图在很多方面将列样式更改为TetBox,可能是我误解了某些东西,有人能让我高兴吗?

1 个答案:

答案 0 :(得分:0)

您应该将编辑 ElementStyle属性设置为TextBox样式:

dgCol.EditingElementStyle = new Style(typeof(TextBox));

DataGridTextColumn有两种风格。一个用于显示,另一个用于编辑。