2012-12-17 84 views
1

我是WPF中的新手。我曾經在Winforms中工作。在DataGrid中編輯單元格(WPF)

在Winforms中我有DataGridView,當我想要單元格值時,我可以更改它。

只需用:

dataGridView[columnIndex, rowIndex].Value = "New Value"; 

它的工作原理。

如何使用WPF中的DataGrid完成此操作? 我正在尋找充滿流量的堆棧,並可能找出一個簡單的方法來做到這一點。

謝謝

+2

我從來沒有碰過DadaGrid從後面的代碼,有一個原因,你不只是改變了的ItemSource價值? –

+0

我該怎麼做? 我沒有來自數據庫的信息。我只是想根據功能更新一些內容。想象一下,一個表格顯示了基於ping的計算機有什麼連接。我想在運行時更改單元格的值,但我沒有數據庫。 –

+1

你不需要數據庫,只是一個列表或其他東西,我會嘗試爲你創建一個簡單的例子,堅持:) –

回答

1

好處理DataGrid最簡單的方法是通過結合一個ItemSource

下面的示例顯示瞭如何綁定您的列表以及如何更改數據網格。

public partial class MainWindow : Window 
{ 
    private ObservableCollection<ConnectionItem> _connectionitems = new ObservableCollection<ConnectionItem>(); 

    public MainWindow() 
    { 
     InitializeComponent(); 
     ConnectionItems.Add(new ConnectionItem { Name = "Item1", Ping = "150ms" }); 
     ConnectionItems.Add(new ConnectionItem { Name = "Item2", Ping = "122ms" }); 
    } 

    public ObservableCollection<ConnectionItem> ConnectionItems 
    { 
     get { return _connectionitems; } 
     set { _connectionitems = value; } 
    } 

    private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     // to change a value jus find the item you want in the list and change it 
     // because your ConnectionItem class implements INotifyPropertyChanged 
     // ite will automaticly update the dataGrid 

     // Example 
     ConnectionItems[0].Ping = "new ping :)"; 
    } 
} 

public class ConnectionItem : INotifyPropertyChanged 
{ 
    private string _name; 
    private string _ping; 

    public string Name 
    { 
     get { return _name; } 
     set { _name = value; NotifyPropertyChanged("Name"); } 
    } 

    public string Ping 
    { 
     get { return _ping; } 
     set { _ping = value; NotifyPropertyChanged("Ping"); } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    /// <summary> 
    /// Notifies the property changed. 
    /// </summary> 
    /// <param name="property">The info.</param> 
    public void NotifyPropertyChanged(string property) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(property)); 
     } 
    } 
} 

的XAML:

<Window x:Class="WpfApplication4.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:WpfApplication4" 
     xmlns:properties="clr-namespace:WpfApplication4.Properties" 
     Title="MainWindow" Height="300" Width="400" Name="UI" > 
    <Grid> 
     <DataGrid Name="dataGridView" ItemsSource="{Binding ElementName=UI,Path=ConnectionItems}" Margin="0,0,0,40" /> 
     <Button Content="Change" Height="23" HorizontalAlignment="Left" Margin="5,0,0,12" Name="button1" VerticalAlignment="Bottom" Width="75" Click="button1_Click" /> 
    </Grid> 
</Window> 

我增加了一個按鈕來說明如何將數據更新時,您在您的列表改變的東西,類ConnectionItem這裏,您將存儲在DataGrid您的所有信息。

希望這有助於

+0

感謝這幫了我很多。現在我有它的工作。 更多的問題,我看到DataGrid顯示您的整個集合,與您的對象的所有propertys。如果我需要某些專欄僅在某些時刻顯示,我該怎麼辦? –

+0

這取決於你想如何以及何時鞋/藏它們,這裏有一些很好的文章: http://stackoverflow.com/questions/6857780/how-to-hide-wpf-datagrid-columns-depending-on -a-property http://www.c-sharpcorner.com/uploadfile/dpatra/hideun-hide-columns-using-context-menu-in-datagrid-in-wpf/ 或者在代碼背後,它很容易' dataGridView.Columns.FirstOrDefault(c => c.Header.ToString()==「Ping」)。Visibility = Visibility.Hidden; –