好的,我第一次觉得我不得不发布关于数据网格的大量信息,但没有什么以我理解的方式解释我需要的东西。
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; }
}
将返回类型为
的字符串的partial类public abstract partial class clsBook { 公共覆盖字符串ToString() { 返回this.Title +“\ t”+ this.Year +“\ t”+ this.Price +“\ t”+ this.Quantity +“\ t”+ this.GetType(); }
public abstract void EditDetails();
public abstract string GetBookType();
答案 0 :(得分:2)
您无需设置AutoGenerateColumns = false
,只需手动将列添加到DataGridView即可。我想您要添加名为NewColumn
的列,此列应绑定到DataSource的数据成员NewColumData
。这是代码:
DataGridViewTextBoxColumn newColumn = new DataGridViewTextBoxColumn(){Name = "NewColumn", DataPropertyName="NewColumnData"};
dataBooks.Columns.Add(newColumn);
dataBooks.DataSource = _Author.Books.ToList();
以下是列自动生成的工作原理:基础DataSource中的所有DataMembers都将循环通过,如果DataGridView中的某个现有Column已经绑定了DataMember,则此列为使用而不是没有创建任何新列。在上面的代码中,您现有的列为NewColumn
,此列已经通过属性NewColumnData
绑定到DataSource
的{{1}},因此使用此列代替创建一个新列。所有其他列都会自动正常创建。
我不明白为什么你想要一个类似DataPropertyName
的方法,如果你想在一个列中显示它,只需为它添加一些属性,如下所示:
GetBookType
我希望这一次,这就是你想要的。
答案 1 :(得分:0)
当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>