将数据集/ DataTable绑定到xaml数据网格

时间:2013-06-18 22:09:04

标签: wpf xaml data-binding mvvm datagrid

我想在我的UI中显示数据网格。我将它绑定到我的viewmodel中的数据集。这是代码:

查看:

        <StackPanel Orientation="Horizontal" Height="Auto" Name="stackPanel4" Width="Auto" Grid.Row="4">
            <DataGrid Name="QueryGrid" AutoGenerateColumns="True" Height="1000" Width="1000" ItemsSource="{Binding QueryTable}" Visibility="{Binding Path=QueryGridVisiblity, Converter={StaticResource BoolToVis}}" />
        </StackPanel>

视图模型:

    private void OnRunQuery()
    {
        int count = 0;
        DataSet queryDataset = null;
        if (flag1 == true)
            count++;
        else if (flag2 == true)
            count++;
        else if (flag3 == true)
            count++;
        else if (flag4 == true)
            count++;
        else if (flag5 == true)
            count++;
        else if (flag6 == true)
            count++;
        if (paramCount > 0 && sqlQuery != null && paramCount == count)
        {
            queryDataset = _service.GetQueryDataSource(sqlQuery);
            m_QueryTable = queryDataset;
            OnPropertyChanged("QueryTable");
            m_Visibility = true;
            OnPropertyChanged("QueryGridVisiblity");
        }
    }
    private DataSet m_QueryTable;

    public DataSet QueryTable
    {
        get
        {
            return m_QueryTable;
        }
        set
        {
            m_QueryTable = value;
            OnPropertyChanged("QueryTable");
        }
    }

在执行应用程序时,不会填充数据网格。但我在我的数据集中获取数据。

我缺少逻辑的任何建议? 我是WPF的新手。

3 个答案:

答案 0 :(得分:2)

您需要绑定到视图模型上返回DataView的属性。有关详细信息,请查看http://www.codeproject.com/Articles/30905/WPF-DataGrid-Practical-Examples

E.g:

public DataView Items
{
    get
    {
        return m_QueryTable.Tables[0].DefaultView;
    } 
}

或者(最好),您可以使用实体和存储库模式从视图模型中抽象出数据访问逻辑。

答案 1 :(得分:1)

DataSet是一组DataTable,而DataGrid只显示一个DataTable。因此,请展示DataTable属性,而不是DataSet

答案 2 :(得分:1)

使用不带引号的表名

E.g:

ItemsSource="{Binding ProductsDataSet.Tables[Products]}"