【问题标题】:DataSet created in code not Binding to ListView在未绑定到 ListView 的代码中创建的数据集
【发布时间】:2011-07-25 12:09:57
【问题描述】:

我有一个 WPF 用户控件,其中包含一个 ListView,它是根据传递给它的 DataSet 创建的:

public void PopulateList(DataSet ds) {
        listView.View = CreateGridViewColumns(ds.Tables[0]);
        listData.DataContext = ds.Tables[0];
}

private GridView CreateGridViewColumns(DataTable dt) {
        // Create the GridView
        var gv = new GridView {AllowsColumnReorder = true};

        // Create the GridView Columns
        foreach (DataColumn item in dt.Columns) {
            var gvc = new GridViewColumn
                          {
                              DisplayMemberBinding = new Binding(item.ColumnName),
                              Header = item.ColumnName,
                              Width = Double.NaN
                          };
            gv.Columns.Add(gvc);
        }

        return gv;
    }

现在我在代码中创建用户控件,并使用适当的数据集将其称为 PopulateList,这就是问题开始的地方:

如果我传入通过调用数据库创建的数据集,则列表视图会显示所有数据,但如果我传入我在代码中创建的 DataSet,则 ListView 会显示列但不会显示数据

//This is a function that hides the DB call return type is DataSet    
var dsPatientSmokingStatusHistory = DataRepository.PatientSmokingStatusProvider.GetHistory(PatientId);
        //radGridViewPatientSmokingStatus.DataSource = dsPatientSmokingStatusHistory.Tables[0];

        var dt = new DataTable();
        string c1 = "Date".PadLeft(23).PadRight(23);
        string c2 = "Status".PadLeft(20).PadRight(50);
        dt.Columns.Add(c1);
        dt.Columns.Add(c2);
        int i = 0;
        foreach (DataRow row in dsPatientSmokingStatusHistory.Tables[0].Rows) {
            var dataRow = dt.NewRow();
            dataRow[c1] = ((DateTime)row["Date"]).ToString("MM/dd/yyyy");
            dataRow[c2] = row["Status"].ToString();
            dt.Rows.Add(dataRow);
            dt.Rows[i].AcceptChanges();
            i++;
        }

        DataSet ds = new DataSet();
        dt.TableName = "Table";
        ds.Tables.Add(dt);
        ds.AcceptChanges();

        smokingStatusGrid.GridWidth = 455;
        smokingStatusGrid.GridHight = 97;
        //This line does not show data
        smokingStatusGrid.PopulateGrid(ds);
        //This line will show data
        smokingStatusGrid.PopulateGrid(dsPatientSmokingStatusHistory);

这两个数据集之间是否存在我不知道的差异,导致我无法对其进行数据绑定?

用户控件也被用作 WinForms 应用程序中的 ElementHost(不确定这是否会有所不同)

【问题讨论】:

    标签: wpf listview dataset binding


    【解决方案1】:

    你的代码说:

    DisplayMemberBinding = new Binding(item.ColumnName)
    

    这个binding constructor 采用一个字符串参数,根据 MSDN,“绑定的初始 Path 并且是数据类型 System.Windows.PropertyPath。我猜,由于系统试图在您的类中查找具有相同名称的属性,并且您的字符串(item.ColumnName)在开始时有空格,因此会遇到问题(属性不能以空格开头)。

    建议您取消您在表格列名中所做的填充。在 GridView 的 Header 中应用任何填充/边距。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多