0

初めて投稿しなければならないと感じたとき、データグリッドにはたくさんの情報がありますが、私が理解している方法で何が必要かを説明するものは何もありません。

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

そして、タイプの文字列を返す部分クラス

public abstract partial class clsBook { public override string ToString() { return this.Title + "\t" + this.Year + "\t" + this.Price + "\t" + this.Quantity + "\t" + this.GetType(); }

    public abstract void EditDetails();

    public abstract string GetBookType();
4

2 に答える 2

2

設定する必要はありませんAutoGenerateColumns = false。通常は DataGridView に列を手動で追加するだけです。という名前の列を追加するとします。この列は、DataSourceNewColumnのデータ メンバーにバインドする必要があります。NewColumDataコードは次のとおりです。

DataGridViewTextBoxColumn newColumn = new DataGridViewTextBoxColumn(){Name = "NewColumn", DataPropertyName="NewColumnData"};
dataBooks.Columns.Add(newColumn);
dataBooks.DataSource = _Author.Books.ToList();

列の自動生成のしくみは次のとおりです。基になる DataSource のすべての DataMembers がループされます。DataMember が DataGridView の既存の列によって既にバインドされている場合は、代わりにこの列が使用され、新しい列は作成されません。 . 上記のコードでは、既存の列は です。この列はすでにProperty を介してにNewColumnバインドされているため、新しい列を作成する代わりに、この列が使用されます。他のすべての列は、通常どおり自動的に作成されます。NewColumnDataDataSourceDataPropertyName

アップデート

のようなメソッドが必要な理由がわかりません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();

今回は、それがあなたの望むものであることを願っています。

于 2013-06-25T05:04:08.993 に答える