У меня есть dataGrid, в который я хочу добавить строки нажатием кнопки. Но когда кнопка нажата. Данные не отображаются в dataGrid. Фактически. В dataGrid ничего не видно. Как я могу решить эту проблему?
public sealed partial class MainPage : Page
{
DataTable table = new DataTable();
public MainPage()
{
this.InitializeComponent();
table.Columns.Add("title", typeof(string));
table.Columns.Add("message", typeof(string));
noteList.AutoGenerateColumns = false;
noteList.ItemsSource = table.DefaultView;
}
private void bNew_Click(object sender, RoutedEventArgs e)
{
table.Rows.Add("Hello", "Hi");
}
}
Я думаю, проще использовать DataGrid. С его помощью вы можете сделать следующее программно.
Мои данные вообще не отображаются в dataGrid
UWP DataGrid
не устанавливает ItemsSource
как table.DefaultView
напрямую, нам нужно использовать следующий метод для загрузки DataTable
.
private ObservableCollection<object> collection = new ObservableCollection<object>();
public void FillDataGrid(DataTable table, DataGrid grid)
{
grid.Columns.Clear();
for (int i = 0; i < table.Columns.Count; i++)
{
grid.Columns.Add(new DataGridTextColumn()
{
Header = table.Columns[i].ColumnName,
Binding = new Binding { Path = new PropertyPath("[" + i.ToString() + "]") }
});
}
var collection = new ObservableCollection<object>();
foreach (DataRow row in table.Rows)
{
collection.Add(row.ItemArray);
}
grid.ItemsSource = collection;
}
Если вы хотите добавить Row
динамически. Пожалуйста, вставьте его в коллекцию, как показано ниже.
private void Button_Click(object sender, RoutedEventArgs e)
{
table.Rows.Add("Hello1", "Hi1");
var last = table.Rows[table.Rows.Count - 1];
collection.Add(last.ItemArray);
}