好吧,第一次我觉得我必须在数据网格上发布很多信息,但没有什么能以我理解的方式解释我需要什么。
dataBooks.DataSource = null;
dataBooks.AutoGenerateColumns = true;
dataBooks.DataSource = _Author.Books.ToList();
这返回了一个对象列表,但是我想添加另一列,在其中我可以调用getType(),它将返回图书格式。
当我将autogeneratecolumns更改为false时,我不知道如何绑定数据,所以我得到了一个空白列表。温柔一点,这对你来说可能很明显,但我是个新手。
我想调用一个方法GetBookType(),它将返回一个字符串。
public abstract partial class Book
{
public Book()
{
this.Orders = new HashSet<Order>();
}
public string AuthorName { get; set; }
public string Title { get; set; }
public double Price { get; set; }
public int Quantity { get; set; }
public int Year { get; set; }
public virtual Author Author { get; set; }
public virtual ICollection<Order> Orders { get; set; }
}
以及将返回类型字符串的分部类
公共抽象分部类clsBook{公共重写字符串ToString(){返回此。标题+"\t"+这个。年份+"\t"+这个。价格+"\t"+这个。数量+"\t"+这个。GetType();}
public abstract void EditDetails();
public abstract string GetBookType();
您不需要设置AutoGenerateColumns = false
,只需手动将列正常添加到DataGridView即可。我想您想添加一个名为NewColumn
的列,该列应该绑定到DataSource的数据成员NewColumData
。这是代码:
DataGridViewTextBoxColumn newColumn = new DataGridViewTextBoxColumn(){Name = "NewColumn", DataPropertyName="NewColumnData"};
dataBooks.Columns.Add(newColumn);
dataBooks.DataSource = _Author.Books.ToList();
列自动生成的工作原理如下:如果DataMember已被DataGridView中的某个现有列绑定,则底层DataSource中的所有DataMember都将循环通过,而将使用此列,并且不会创建任何新列。在上面的代码中,您现有的列是NewColumn
,此列已经通过属性DataPropertyName
绑定到DataSource
的NewColumnData
,因此使用此列而不是创建新列。所有其他列都是正常自动创建的。
更新
我不明白你为什么要有一个像GetBookType
这样的方法,如果你想在一列中显示它,只需为它添加一些属性,而不是像这样:
public abstract partial class Book
{
public Book()
{
this.Orders = new HashSet<Order>();
}
//other properties of yours go here
//--------------------------------
//---------------------------------
public string BookInfo {
get {
return this.Title + "t" + this.Year + "t" + this.Price + "t" + this.Quantity + "t" + this.GetType();
}
}
}
//Then you can bind your list to your DataGridView like this
DataGridViewTextBoxColumn newColumn = new DataGridViewTextBoxColumn(){Name = "NewColumn", DataPropertyName="BookInfo"};//Notice the BookInfo which is assigned as the DataPropertyName for your new column.
dataBooks.Columns.Add(newColumn);
dataBooks.DataSource = _Author.Books.ToList();
我希望这一次,它是你想要的。
当AutoGenerateColumns为false时,必须为每个属性添加DataGridTextColumn,如下所示,其中Name和BookType是Book类的属性。
<sdk:DataGrid Name="dataGrid" AutoGenerateColumns="False" SelectionMode="Single">
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn
Header="Book Name"
Binding="{Binding Name, Mode=TwoWay}"/>
<sdk:DataGridTextColumn
Header="Book Type"
Binding="{Binding BookType, Mode=TwoWay}"/>
</sdk:DataGrid.Columns>
</sdk:DataGrid>