2017-02-11 53 views
0

我一直在努力與DataGrid。c#如何正確編輯對象與DataGrid

我需要從SQL中讀取數據並將它們填充到表中,並可以編輯它們(不需要將更改上傳回數據庫)。然後根據表格,我將生成一份報告。

我從來沒有使用過DataGrid,我也是WPF概念的新手,但這裏有兩種我嘗試過的方法。

第一招:dataGridItems.ItemsSource = previewItems;其中previewItemsItem對象列表。

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"該應用程序崩潰,這是一些思考,我不會失望。

我花了幾個小時找到一種溶劑 - 發現了一些,但要麼我沒有失敗,要麼他們沒有工作。

感謝您的幫助

回答

0

[...]這是動態調整大小基於其當前可見

只要你喜歡你可以風格的列數據。假設DT是你的DataGrid,處理AutoGeneratingColumn事件:

 dt.AutoGeneratingColumn += Dt_AutoGeneratingColumn; 
//.... 
private void Dt_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) 
{ 
    DataGridColumn col = e.Column; 
    // you can set the maximum width of the column: 
    col.MaxWidth = 200.0; 
    // or you can define a element style, for text wrapping, etc. 
    col.CellStyle = (Style)FindResource("cellStyle"); 
    } 

其中風格App.xaml中聲明。類似這樣的:

<Application.Resources> 
    <Style x:Key="cellStle"> 
     <Setter Property="TextBlock.TextWrapping" Value="Wrap" /> 
    </Style> 
</Application.Resources> 
+0

感謝它的工作。我可以爲特定列定義列的大小嗎?現在它在datagrid中設置所有的comlumns。 – Izmail360

+0

檢查_e.Column.Header_或_e.Column.DisplayIndex_或任何其他信息,如果您不想更改任何內容,請使用return。 – Ron