0

基本的に私は C# と WPF の初心者ですが、

私は DataTable とバインドする WPF DataGrid を持っています

ここに DataGrid の XAML

<DataGrid AutoGenerateColumns="True" CanUserAddRows="False" HorizontalAlignment="Left" 
           ItemsSource="{Binding Path=., Mode=TwoWay}" 
           Margin="10,99,0,56" Name="dataGrid1" 
           SelectionUnit="CellOrRowHeader" Width="1044">  
</DataGrid>

ここでは、MySQL データを DataTable にロードする別のクラスの public メソッド

public DataTable dtQueries(string userQuery, string cnString = null)
{
    //##Open the connection
    if (cnString == null)
    {
        this.open_connection("localConnectionString");
    }
    else
    {
        this.open_connection(cnString);
    }

    //##Create Command
    MySqlCommand cmd = new MySqlCommand(userQuery, mysqlConn);

    //##Create a data reader and Execute the command

    DataTable table = new DataTable();
    MySqlDataAdapter da = new MySqlDataAdapter(cmd);
    da.Fill(table);

    return table;
}

ここでは、DataTable を DataGrid にバインドするコード

DataSet ds = new DataSet();
string qGetDM = "SELECT * FROM mytable";

dataGrid1.BeginInit();

ds.Tables.Add(dboperation.dtQueries(qGetDM, "clientLegacyDM"));
dataGrid1.DataContext = ds.Tables[0];

dataGrid1.Items.Refresh();
dataGrid1.EndInit();

DataGridでのユーザーの変更に基づいてMySQLデータベースを更新するためのSubmitButtonとして1つのコマンドボタンがあります..

誰もこれを行う方法を提案していますか?

thx、私は本当に助けてくれてありがとう:D

4

1 に答える 1

0

私は自分の問題を解決したと思います。この解決策は最善の解決策ではないかもしれませんが、少なくとも私にとってはうまくいきます。

XAML

<DataGrid AutoGenerateColumns="True" CanUserAddRows="False" HorizontalAlignment="Left" 
        ItemsSource="{Binding Path=., Mode=TwoWay}" 

        Margin="10,99,0,56" Name="dataGrid1" SelectionUnit="CellOrRowHeader" 
        Width="1044" 
</DataGrid>

次に、

MySQL データを DataTable にロードする別のクラスの public メソッド

今のところ私はDataSetここでメソッドを使用しています。このクラスに名前を付けましょうMySQLOp

public MySqlDataAdapter mysqlDA; //Member variable of class "MySQLOp"
public DataSet mysqlDS; //Member variable of class "MySQLOp"

//public method to return user query as a DataSet
public DataSet dsQueries(string userQuery, string cnString = null)
{
    //##Open the connection
    if (cnString == null)
    {
        this.open_connection("localConnectionString");
    }
    else
    {
        this.open_connection(cnString);
    }

    //##Create Command
    MySqlCommand cmd = new MySqlCommand(userQuery, mysqlConn);
    mysqlDA = new MySqlDataAdapter(cmd);

    mysqlDS = new DataSet();

    mysqlDA.Fill(mysqlDS);

    return mysqlDS;

}

wpfウィンドウで「FormCRUD」という名前を付けてcommandbutton、データをロードするために作成します。コードは次のとおりです。

MySQLOp dboperation;
public yourForm()
{
    InitializeComponent();

    dboperation = new MySQL();
}

private void btnClLoad_Click(object sender, RoutedEventArgs e)
{
    string tablename = "your_table_name";
    qGetDM = "SELECT * FROM " + tablename;

    //#### Bind the DataSet to the GridView ####
    dataGrid1.BeginInit();

    //## Get Clien Data and return as DataSet
    dboperation.dsQueries(qGetDM, "clientLegacyDM");

    //## Set DataGrid ItemSource
    dataGrid1.SetBinding(ItemsControl.ItemsSourceProperty, new Binding
    {
        Source = dboperation.mysqlDS.Tables[0]
    });
    dataGrid1.Items.Refresh();
    dataGrid1.EndInit();

}

で、保存して MySQL DB に戻すMySQLOp class別のメソッドを作成します。メソッドは次のとおりです。DataSet

public DataSet CreateCommandAndUpdate()
{            
    MySqlCommandBuilder myBuilder = new MySqlCommandBuilder(mysqlDA);
    mysqlDA.Update(mysqlDS);
    return mysqlDS;
}

最後に、メソッドを呼び出すデータベースにデータ変更を送信するために、別commandbuttonのを追加します。コードは次のとおりですFormCRUDSubmitUpdateCreateCommandAndUpdate()

private void btnClUpdate_Click(object sender, RoutedEventArgs e)
{
    dboperation.CreateCommandAndUpdate();
}

私にとってこれは一時的な解決策にすぎません。私はまだ最善かつエレガントな解決策を探しています。多分あなたは私に別の解決策を与えることができます。

于 2013-03-06T11:07:57.917 に答える