添加其他列以使用数据源winforms datagrid

时间:2013-06-25 04:20:44

标签: c# winforms datagrid

好的,我第一次觉得我不得不发布关于数据网格的大量信息,但没有什么以我理解的方式解释我需要的东西。

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

2 个答案:

答案 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>