Добавить новую строку в DataTable - PullRequest
1 голос
/ 28 апреля 2011

У меня есть DataGrid привязка к базе данных с одной таблицей и одним столбцом (FooTable и FooName).С помощью моего следующего кода я могу связать DataGrid с DataTable и отобразить данные базы данных.Но когда каждый раз я добавляю новую строку на DataSet_Add_Click(), к DataGrid ничего не добавляется.Хотя я связал DataTable с DataGrid до ItemsSource, но добавление новой строки в DataTable не добавляет строку в DataGrid.Почему?

public partial class MainWindow : Window
{
    SqlCeConnection conn = new SqlCeConnection();

    /* Define the Connection String */
    string connString;
    DataGrid dg1 = new DataGrid();
    DataTable dt = new DataTable();

    public MainWindow()
    {
        InitializeComponent();

        connString = @"...";

        SqlCeConnection conn = new SqlCeConnection(connString);
        conn.Open();

        SqlCeDataAdapter da = new SqlCeDataAdapter();

        string sqlStr = @"SELECT * FROM FooTable";
        da.SelectCommand = new SqlCeCommand(sqlStr, conn);

        DataSet ds = new DataSet();
        da.Fill(ds, "FooTable");

        dt = ds.Tables["FooTable"];

        dg1.ItemsSource = ds.Tables;

        DataRow newRow = dt.NewRow();
        newRow["FooName"] = "Mary";
        dt.Rows.Add(newRow);

        CreateDataGrid();
    }

    public struct DataItem1
    {
        public string FooName { get; set; }
    }

    private void CreateDataGrid()
    {
        DataGridTextColumn col = new DataGridTextColumn();

        col = new DataGridTextColumn();
        col.Binding = new Binding("FooName");
        col.Header = "FooName";
        dg1.Columns.Add(col);

        /* dataGrid1 exist in XAML and is a parent of the DataGrid */
        dataGrid1.Children.Add(dg1);
    }

    private void DataSet_Add_Click(object sender, RoutedEventArgs e)
    {
        DataRow newRow2 = dt.NewRow();
        newRow2["FooName"] = "Mary";
        dt.Rows.Add(newRow2);
    }
}

Ответы [ 4 ]

2 голосов
/ 28 апреля 2011

Пожалуйста, опубликуйте свой код xaml или cs, где вы связываете Itemssource.

Ваш DataSet_Add_Click добавляет строку в таблицу данных? если да, то, похоже, это проблема обновления / связывания с вашей сеткой данных.

когда я работаю с таблицами данных и сеткой данных, я всегда использую следующее

//ctor or init
dt = ds.Tables["FooTable"];
//the next line you have to write after you initialize your datatable
this.MyView = (BindingListCollectionView)CollectionViewSource.GetDefaultView(this.dt);

1008 * XAML *

<DataGrid ItemsSource="{Binding MyView }"/>

Обновить

this.MyView.Refresh();

EDIT: MyView является собственностью

public BindingListCollectionView MyView
{ 
   get {return this._myview;}
   set {this._myview = value; OnPropertyChanged("MyView");
}

Вы можете сделать привязку в коде.

 Binding myBinding = new Binding("MyView");
 myBinding.Source = this;//the instance with the MyView property
 mydatagridctrl.SetBinding(ItemsControl.ItemsSourceProperty, myBinding);
1 голос
/ 28 апреля 2011

Привет, я редактирую свой ответ в другой теме .

общий способ, которым я пользуюсь при работе с таблицами данных, сетью данных и wpf / mvvm:

я всегда связываю источник элементов сетки данных с BindingListCollectionView объекта данных. Я делаю это потому, что могу легко фильтровать, обновлять или добавлять / удалять / изменять элементы данных.

0 голосов
/ 28 апреля 2011

Попробуйте позвонить dt.DataBind(); в конце.

0 голосов
/ 28 апреля 2011

Попробуйте добавить это в конец вашего DataSet_Add_Click метода

dg1.Items.Refresh();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...