如何将行数据直接添加到DataGrid类?

时间:2011-10-04 11:10:18

标签: c# silverlight c#-4.0 silverlight-4.0 datagrid

如何将行数据直接添加到DataGrid类?

我正在使用一个我不喜欢的公司的免费开源课程(即使它是RadiantQ)我非常喜欢。它有一个很酷的MuLtiColumnTreeList控件,它是树控件和数据网格的组合。它附带了一个示例代码,您可以查看它和一切。这很酷。它继承自DataGrid类。

问题是我对这个级别的数据绑定有点新意,所以我想继续编写一些代码,强制我从另一个类收集的数据进入控件。

因此,我在线查看了如何为DataGrid类执行此操作,并且信息不易获取。有人可以帮忙吗?

似乎一旦数据绑定完成,并且如果您更改数据,则必须重新绑定到控件。这是给我带来困难的原因。所以我要做的就是运行这样的命令:

this.mutlicoolgridview.ItemsSource = null; this.mutlicoolgridview.ItemsSource = SampleData.GetSampleDataNew();

我现在遇到的问题是这个。在执行了大约一千次命令之后,我实际上已经没有内存了。我认为这样做:

this.mutlicoolgridview.ItemsSource = null;

不是一个好主意。是否有更好的命令来释放内存?

这是一个类似的崩溃: [IMG]http://i67.photobucket.com/albums/h292/Athono/unusual.png[/IMG]

2 个答案:

答案 0 :(得分:0)

如果您有对象列表,则可以将它们复制到BindingList。然后你可以使用

dataGrid.ItemsSource = myBindingList;

答案 1 :(得分:-2)

要向DataGrid添加行,首先需要将DataSource绑定到DataGrid,然后向DataSource添加行。

有效的数据源是:

  • A DataTable
  • A DataView
  • 数据集
  • DataViewManager
  • 单维数组
  • 任何实现IListSource接口的组件
  • 实现IList接口的任何组件

这是一个Windows Form示例,它将一行添加到绑定到DataGrid的DataTable:

public partial class Form1 : Form
{
    // Instantiate the DataSource that will be bound to the DataGrid
    DataSet dataSet = new DataSet("MyDataSet");
    DataTable dataTable = new DataTable("MyDataTable");

    public Form1()
    {
        InitializeComponent();

        this.dataSet.Tables.Add(this.dataTable);
        this.dataTable.Columns.Add(new DataColumn("Date"));

        // Bind the DataTable to the DataGrid
        this.dataGrid1.SetDataBinding(this.dataSet, "MyDataTable");
    }    

    private void button1_Click(object sender, EventArgs e)
    {
        // When the user clicks the button, add a new row to the DataTable
        DataRow dr = this.dataTable.NewRow();
        dr["Date"] = DateTime.Now;
        this.dataTable.Rows.Add(dr);
    }
}

我建议您创建一个抛弃项目并使用DataGrid类来熟悉DataGrid与DataSource一起使用的不同方式。