Ответ 1
В файле cs
DataTable employeeData = CreateDataTable();
gridEmployees.DataContext = employeeData.DefaultView;
В файле xaml
<DataGrid Name="gridEmployees" ItemsSource="{Binding}">
У меня проблема с привязкой DataTable
к DataGrid
. Я уже искал решения, но просто не могу избавиться от ошибки. Связывание отлично работает при использовании WindowsForms, поэтому DataTable
верен. Я просто не могу привязать его к WPF-DataGrid.
Сообщение об ошибке: Нарушение AmbiguousMatchException было необработанным
Источник: mscorlib
Я уже создал новый проект, чтобы избавиться от любых плохих ссылок и т.д.
XAML-код:
<DataGrid x:Name="grid1" Margin="10" ItemsSource="{Binding}"
AutoGenerateColumns="True"></DataGrid>
Я уже пробовал следующий С# -код позади:
grid1.ItemsSource = dt.DefaultView;
или
grid1.DataContext = dt.DefaultView;
или
grid1.DataContext = dtex;
Любая помощь приветствуется.
В файле cs
DataTable employeeData = CreateDataTable();
gridEmployees.DataContext = employeeData.DefaultView;
В файле xaml
<DataGrid Name="gridEmployees" ItemsSource="{Binding}">
using (SqlCeConnection con = new SqlCeConnection())
{
con.ConnectionString = connectionString;
con.Open();
SqlCeCommand com = new SqlCeCommand("SELECT S_no,Name,Father_Name")
SqlCeDataAdapter sda = new SqlCeDataAdapter(com);
System.Data.DataTable dt = new System.Data.DataTable();
sda.Fill(dt);
dataGrid1.ItemsSource = dt.DefaultView;
dataGrid1.AutoGenerateColumns = true;
dataGrid1.CanUserAddRows = false;
}
В файле .cs
grid.DataContext = table.DefaultView;
В файле xaml
<DataGrid Name="grid" ItemsSource="{Binding}">
Я ожидаю, что Rohit Vats упомянул в Comment, что у вас есть неправильная структура в вашем DataTable
.
var t = new DataTable();
// create column header
foreach ( string s in identifiders ) {
t.Columns.Add(new DataColumn(s)); // <<=== i'm expecting you don't have defined any DataColumns, haven't you?
}
// Add data to DataTable
for ( int lineNumber = identifierLineNumber; lineNumber < lineCount; lineNumber++ ) {
DataRow newRow = t.NewRow();
for ( int column = 0; column < identifierCount; column++ ) {
newRow[column] = fileContent.ElementAt(lineNumber)[column];
}
t.Rows.Add(newRow);
}
return t.DefaultView;
Я использовал этот DataTable в ValueConverter
и работает как шарм со следующей привязкой.
<DataGrid AutoGenerateColumns="True" ItemsSource="{Binding Path=FileContent, Converter={StaticResource dataGridConverter}}" />
Итак, что он делает, ValueConverter
преобразует мои ограниченные данные (что бы это ни было, в моем случае это a List<string[]>
) в DataTable
, как показывает вышеприведенный код, и передает этот DataTable
в DataGrid
. С указанными столбцами данных сетка данных может генерировать необходимые столбцы и визуализировать их.
Чтобы сказать это в двух словах, в моем случае привязка к DataTable
работает как шарм.
Вы можете использовать DataGrid в WPF
SqlDataAdapter da = new SqlDataAdapter("Select * from Table",con);
DataTable dt = new DataTable("Call Reciept");
da.Fill(dt);
DataGrid dg = new DataGrid();
dg.ItemsSource = dt.DefaultView;
В файле cs:
private DataTable _dataTable;
public DataTable DataTable
{
get { return _dataTable; }
set { _dataTable = value; }
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
this._dataTable = new DataTable("table");
this._dataTable.Columns.Add("col0");
this._dataTable.Columns.Add("col1");
this._dataTable.Columns.Add("col2");
this._dataTable.Rows.Add("data00", "data01", "data02");
this._dataTable.Rows.Add("data10", "data11", "data22");
this._dataTable.Rows.Add("data20", "data21", "data22");
this.grid1.DataContext = this;
}
В файле Xaml:
<DataGrid x:Name="grid1"
Margin="10"
AutoGenerateColumns="True"
ItemsSource="{Binding Path=DataTable, Mode=TwoWay}" />