DataGridView column footer c#.net winforms

前端 未结 3 972
走了就别回头了
走了就别回头了 2020-12-06 03:16

Is there a way to add a column footer in a datagridview which is not databound? I am using it to take user input for adding inventory. Currently I am using a la

3条回答
  •  心在旅途
    2020-12-06 03:45

    I ran into the same problem previously and after a long search I realised;

    1. Winform Datagridview do not support adding footer to it.

    2. I tried adding an extra row that could hold the summary but still did not work out fine.

    3. You can create a user control that has two grids and with the lower grid holding the summary.

    Solution-- enter image description here

    1. My solution that used data binding.(1)-I Create an abstract object Item with (Name, Cost) properties.(2)-I Create a Concrete item i.e ConcItem that inherit Item(3)-I create a footer item i.e FooterItem that also inherits Item(4)-A collection of Items i.e ItemList where you instantiate the footer item.(5) Finally, just before you do data binding call the method that adds the footer item.

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

提交回复
热议问题