Я борюсь с DataGrid.C# как правильно редактировать объекты с помощью DataGrid
Мне нужно прочитать данные из SQL и заполнить их в таблицу, с возможностью их редактирования (не требуется загружать изменения обратно в DB). Затем, основываясь на таблице, я создам отчет.
Я никогда раньше не работал с DataGrid, и я также новичок в концепциях WPF, но вот два подхода, которые я пробовал.
Первый:dataGridItems.ItemsSource = previewItems;
где previewItems
находится список Item
объектов.
public class Item
{
public string ItemName { get; set; }
public string ItemCode { get; set; }
public decimal ItemPrice { get; set; }
public Item(string itemName, string itemCode, decimal itemPrice = 0)
{
this.ItemName = itemName;
this.ItemCode = itemCode;
this.ItemPrice = itemPrice;
}
}
Я могу читать/писать данные - как я бы хотел. Проблема с этим решением - это размер столбца, который динамически изменяется на основе данных, которые в настоящее время видны.
Второй: Переплет в XAML.
<DataGrid x:Name="dataGridItems" IsReadOnly="True" SelectionMode="Single" HorizontalAlignment="Left" Margin="691,10,0,0" Grid.Row="2" VerticalAlignment="Top" Height="628" Width="791" MinWidth="260" MouseDoubleClick="dataGridItems_MouseDoubleClick">
<DataGrid.Columns>
<DataGridTextColumn Header="Kód" MinWidth="60" Width="10*" Binding="{Binding Path=ItemCode}"/>
<DataGridTextColumn Header="Název výkonu" MinWidth="200" Width="90*" Binding="{Binding Path=ItemName}"/>
</DataGrid.Columns>
</DataGrid>
Затем в цикле, я добавлял элементы
DataGridCustomer.Items.Add(customer);
Это работает для меня, пока я обнаружил, что приложение сбой каждый раз, когда я дважды щелкните на DataGrid
cell.Even, если я изложу IsReadOnly="True"
, что-то вроде того, что я не недооцениваю.
Я потратил несколько часов, чтобы найти разрешение - нашел некоторых, но либо я не недооценил, либо они не работали.
Спасибо за помощь
Спасибо, что работает. Могу ли я определить размер колонок для определенного столбца? Теперь он устанавливает все столбцы в datagrid. – Izmail360
Проверьте _e.Column.Header_ или _e.Column.DisplayIndex_ или любую другую информацию, и если вы не хотите ничего менять, просто используйте return. – Ron