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 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();

我有一个命令按钮作为 SubmitButton,可以根据 DataGrid 中的用户更改来更新 MySQL 数据库。

任何人有建议如何做到这一点?

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

现在我在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();

}

在 上MySQLOp class,我创建了另一种方法来保存DataSet以保存回 MySQL DB,方法如下:

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

最后,我添加了另一个commandbutton作为FormCRUDSubmitUpdate将数据更改提交回调用CreateCommandAndUpdate()方法的数据库,代码如下

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

对我来说这只是一个临时解决方案,我仍在寻找最佳和优雅的解决方案。也许你可以给我另一个解决方案。

于 2013-03-06T11:07:57.917 回答