0

私はソフトウェア (個人使用) を計画中です.. アプリケーションの主な機能はデータ グリッドです。

データ グリッドに新しい行を追加するボタンがあります。別のウィンドウでデータを追加するのではなく、データ グリッドに行を直接追加することを考えています。つまり、[新規] をクリックすると、[保存] をクリックするまで編集可能なデータ グリッドに新しい行が直接表示されます。編集中、一部のフィールドにドロップダウンが表示される場合があります。これは、Windows フォームまたは WPF で C# を使用して実現できますか? 可能であれば、デモ用のコードが役立ちます。

4

3 に答える 3

0

これを実装するための踏み台となる実用的な例を次に示します。

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <StackPanel>
        <Button Content="Add New Item" x:Name="myButton" Click="myButton_Click" />
        <DataGrid x:Name="myGrid" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" CanUserAddRows="False" />
    </StackPanel>
</Window>

コードビハインド:(コードビハインドのファンではありませんが、簡単で汚い例です)

public partial class MainWindow : Window
{

    ObservableCollection<MyViewModel> guys { get; set; }

    public MainWindow()
    {
        InitializeComponent();
        guys = new ObservableCollection<MyViewModel>();
        guys.Add(new MyViewModel { Name = "First Guy", Age = 21, FavoriteColor = "Blue" });
        guys.Add(new MyViewModel { Name = "Second Guy", Age = 22, FavoriteColor = "Red" });
        guys.Add(new MyViewModel { Name = "Third Guy", Age = 23, FavoriteColor = "Yellow" });
        guys.Add(new MyViewModel { Name = "Fourth Guy", Age = 24, FavoriteColor = "Green" });
        myGrid.ItemsSource = guys;
    }

    public class MyViewModel
    {
        public String Name { get; set; }
        public int Age { get; set; }
        public String FavoriteColor { get; set; }
    }

    private void myButton_Click(object sender, RoutedEventArgs e)
    {
        guys.Add(new MyViewModel { Name = "[New Guy]", Age = 0, FavoriteColor = "[Color]" });
    }

}

お役に立てれば!

于 2012-06-26T17:48:42.743 に答える
0

これは、データバインディングを使用した簡単な例です:*

XAML で:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Button Margin="0,0,417,277" Click="Button_Click">ADD</Button>
        <DataGrid ItemsSource="{Binding MyDataTable}" Margin="0,40,0,21" CanUserAddRows="False">
        </DataGrid>
    </Grid>
</Window>

コードビハインド .cs :

using System;
using System.Windows;
using System.Data;
using System.ComponentModel;

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window , INotifyPropertyChanged
    {

        public MainWindow()
        {
            InitializeComponent();
            DataContext = this;

            MyDataTable = new DataTable();
            MyDataTable.Columns.Add("Column1");
            MyDataTable.Columns.Add("Column2");

        }
        private DataTable _MyDataTable;
        public DataTable MyDataTable
        {
            get
            {
                return _MyDataTable;
            }
            set
            {
                _MyDataTable = value;
                NotifyPropertyChanged("MyDataTable");
            }
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            DataRow row = MyDataTable.NewRow();

            MyDataTable.Rows.Add(row);


        }



        public event PropertyChangedEventHandler PropertyChanged;
        private void NotifyPropertyChanged(String info)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(info));
            }
        }
    }
}
于 2012-06-26T16:58:02.130 に答える
0

Windows フォームのサンプル コードを次に示します。フォームを作成し、それに DataGridView コンポーネントを追加する必要があります (いくつかの列を選択して)。btnNew および btnSave ボタンも追加し、対応するクリック イベントにバインドします。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        // Hide row headers
        dataGridView1.RowHeadersVisible = false;
    }

    // Add new row to grid
    private void btnNew_Click(object sender, EventArgs e)
    {
        // Insert new row as the first row
        dataGridView1.Rows.Insert(0, new DataGridViewRow());

        // Set the current cell to the first cell in the newly added row
        dataGridView1.CurrentCell = dataGridView1.Rows[0].Cells[0];

        // Begin edit so that the focus goes straight to the new row
        dataGridView1.BeginEdit(false);
    }

    // "Save" (make the rows non editable)
    private void btnSave_Click(object sender, EventArgs e)
    {
        foreach (DataGridViewRow row in dataGridView1.Rows)
        {                
            // Set readonly so the user won't be able to edit these rows anymore
            row.ReadOnly = true;
        }
    }
}
于 2012-06-26T18:52:14.993 に答える