608987 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

「東雲 忠太郎」の平凡な日常のできごと

「東雲 忠太郎」の平凡な日常のできごと

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
2024.03.31
XML
カテゴリ:C#.NET


以下は、WPFアプリケーションでICommandを使用してDataTableの更新を実装するサンプルコードです。


```csharp

using System;

using System.Collections.ObjectModel;

using System.Data;

using System.Data.SqlClient;

using System.Windows;

using System.Windows.Input;


namespace WpfDataTableUpdate

{

    public class MainViewModel : ViewModelBase

    {

        private readonly string _connectionString = "YourConnectionString";

        private readonly string _selectQuery = "SELECT * FROM YourTable";

        private readonly string _updateQuery = "UPDATE YourTable SET Column1 = @Column1, Column2 = @Column2 WHERE Id = @Id";


        private DataTable _dataTable;


        public DataTable DataTable

        {

            get { return _dataTable; }

            set

            {

                _dataTable = value;

                OnPropertyChanged(nameof(DataTable));

            }

        }


        public ICommand UpdateCommand { get; }


        public MainViewModel()

        {

            UpdateCommand = new RelayCommand(Update);


            // Load data initially

            LoadData();

        }


        private void LoadData()

        {

            using (SqlConnection connection = new SqlConnection(_connectionString))

            {

                SqlCommand command = new SqlCommand(_selectQuery, connection);

                SqlDataAdapter adapter = new SqlDataAdapter(command);

                DataTable dataTable = new DataTable();

                adapter.Fill(dataTable);

                DataTable = dataTable;

            }

        }


        private void Update(object parameter)

        {

            DataRow row = parameter as DataRow;

            if (row != null)

            {

                using (SqlConnection connection = new SqlConnection(_connectionString))

                {

                    SqlCommand command = new SqlCommand(_updateQuery, connection);

                    command.Parameters.AddWithValue("@Column1", row["Column1"]);

                    command.Parameters.AddWithValue("@Column2", row["Column2"]);

                    command.Parameters.AddWithValue("@Id", row["Id"]);

                    connection.Open();

                    command.ExecuteNonQuery();

                }

            }

        }

    }


    public class RelayCommand : ICommand

    {

        private readonly Action<object> _execute;

        private readonly Func<bool> _canExecute;


        public RelayCommand(Action<object> execute, Func<bool> canExecute = null)

        {

            _execute = execute ?? throw new ArgumentNullException(nameof(execute));

            _canExecute = canExecute;

        }


        public event EventHandler CanExecuteChanged

        {

            add { CommandManager.RequerySuggested += value; }

            remove { CommandManager.RequerySuggested -= value; }

        }


        public bool CanExecute(object parameter)

        {

            return _canExecute == null || _canExecute();

        }


        public void Execute(object parameter)

        {

            _execute(parameter);

        }

    }

}

```


```xml

<Window x:Class="WpfDataTableUpdate.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

        xmlns:local="clr-namespace:WpfDataTableUpdate"

        mc:Ignorable="d"

        Title="MainWindow" Height="450" Width="800">

    <Window.DataContext>

        <local:MainViewModel/>

    </Window.DataContext>

    <Grid>

        <DataGrid ItemsSource="{Binding DataTable}" AutoGenerateColumns="True"/>

        <Button Content="Update" Command="{Binding UpdateCommand}" HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="10"/>

    </Grid>

</Window>

```


このサンプルでは、ViewModel内でDataTableをロードし、DataGridにバインドして表示します。また、UpdateCommandを実装して、DataRowの更新が行われた際にデータベースを更新します。 RelayCommandは、ICommandの実装を提供します。






お気に入りの記事を「いいね!」で応援しよう

Last updated  2024.03.31 18:05:14



© Rakuten Group, Inc.