5

datagridviewデータバインドされていないに列フッターを追加する方法はありますか?在庫を追加するためのユーザー入力を取得するために使用しています。現在、合計を表示するためにラベルを使用していますが、可能であればフッターに変更したいと思います。

4

3 に答える 3

7

私は以前に同じ問題に遭遇し、長い検索の後に気づきました。

  1. Winform Datagridviewは、フッターの追加をサポートしていません。

  2. 要約を保持できる行を追加しようとしましたが、それでもうまくいきませんでした。

  3. 2つのグリッドがあり、下のグリッドが要約を保持するユーザーコントロールを作成できます。

解決 - ここに画像の説明を入力してください

  1. データバインディングを使用した私のソリューション。(1) -(Name、Cost)プロパティを使用して抽象オブジェクトItemを作成します。(2) -Itemを継承するConcItemなどの具象アイテムを作成します。(3) -FooterItemなどのフッターアイテムを作成します。これもItem(4)を継承します-アイテムのコレクション、つまりフッターアイテムをインスタンス化するItemList。(5)最後に、データバインディングを実行する直前に、フッターアイテムを追加するメソッドを呼び出します。

    public abstract class Item
    {
      public virtual string Name { get; set; }
      public virtual int Cost { get; set; }
    }
    public  class ConcItem:Item
    {
      public override string Name { get; set; }
      public override int Cost { get; set; }        
    }
    public  class FooterItem:Item 
    {
      public override string Name { get { return "Total"; } }
      public override int Cost { get; set; }
    }
    public class ItemList : List<Item>
    {
      private Item _footer;
    
      public void SetFooter()
      {
        _footer = new FooterItem();            
        foreach (var item in this)
        {
          _footer.Cost += item.Cost;              
        }
        this.Add(_footer);
      }
    }
    
    
    public partial class Form1 : Form
    {
      Item _item;
      ItemList _itemList;
      public Form1()
      {
        InitializeComponent();
        dgv.DataBindingComplete += dgv_DataBindingComplete;
        _itemList = new ItemList();
    
        SetSampleData();
      }
      private void SetSampleData()
      {
        _item = new ConcItem();
        _item.Name = "Book";
        _item.Cost = 250;
        _itemList.Add(_item);
    
        _item = new ConcItem();
        _item.Name = "Table";
        _item.Cost = 500;
        _itemList.Add(_item);
    
        _item = new ConcItem();
        _item.Name = "PC";
        _item.Cost = 700;
        _itemList.Add(_item);
    
        dgv.DataSource = null;
        _itemList.SetFooter();  //Add the footer item b4  data binding
        dgv.DataSource = _itemList;
      }
      void dgv_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
      {
        //If you want to do some formating on the footer row
        int rowIndex = dgv.Rows.GetLastRow(DataGridViewElementStates.Visible);
        if (rowIndex <= 0)
        {
          return;
        }
        dgv.Rows[rowIndex].DefaultCellStyle.BackColor = Color.Red;
        dgv.Rows[rowIndex].DefaultCellStyle.SelectionBackColor = Color.Red;        
        dgv.Rows[rowIndex].DefaultCellStyle.Font = new Font("Microsoft Sans Serif", 12f,    FontStyle.Bold);
      }
    }
    
于 2012-10-25T13:00:47.237 に答える