2011-03-29 104 views
1

我有它一个ListView是基于传递给它的数据集创建一个WPF用户控件:数据集不绑定到ListView控件

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

这两个数据集之间有没有区别,我不知道这是阻止我从数据绑定到它?

也正在使用的用户控件作为ElementHost的一个WinForms应用程序(不知道这是否有差别)

回答

0

您的代码表示:

DisplayMemberBinding = new Binding(item.ColumnName) 

binding constructor采用一个字符串放慢参数,其作为每个MSDN是“初始Path绑定”和数据类型System.Windows.PropertyPath。我想,因为系统试图在你的类中找到一个同名的属性,并且你的字符串(item.ColumnName)在开始时有空格,它会遇到问题(属性不能以空格开始)。

建议您在桌子的列名称中取消填充。在GridView的标题中应用任何填充/边距。