Нижний колонтитул столбца DataGridView c # .net winforms

Есть ли способ добавить нижний колонтитул вdatagridview который не связан с данными? Я использую его, чтобы принять пользовательский ввод для добавления инвентаря. В настоящее время я использую метку для отображения суммы, но я хочу изменить ее на нижний колонтитул, если это возможно

Ответы на вопрос(2)

Решение Вопроса

Winform Datagridview не поддерживает добавление нижнего колонтитула.

Я попытался добавить дополнительную строку, которая могла бы содержать резюме, но все еще не работала хорошо.

Вы можете создать пользовательский элемент управления с двумя сетками и с нижней сеткой, содержащей сводку.

Решение--

Мое решение, которое использовало привязку данных. (1) -I Создать абстрактный объектПредмет со свойствами (Name, Cost). (2) -I Создать конкретный элемент, т.е.ConcItem что наследуютПредмет(3) -Я создаю элемент нижнего колонтитула, т.е.FooterItem это также наследуетПредмет(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);
  }
}
 Nitin Kabra26 окт. 2012 г., 17:15
спасибо за информацию .. будет здорово, если ты сможешь поделиться кодом ..

используя NewRow DataGridView, как это.

using System;
using System.Drawing;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            this.dataGridView1.CellFormatting += dataGridView1_CellFormatting;
            this.dataGridView1.CellValueChanged += dataGridView1_CellValueChanged;
        }

        void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex != this.dataGridView1.NewRowIndex && e.ColumnIndex == 2)
            {
                this.dataGridView1.InvalidateRow(this.dataGridView1.NewRowIndex);
            }
        }

        void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (e.RowIndex == this.dataGridView1.NewRowIndex)
            {
                e.CellStyle.Font = new Font(e.CellStyle.Font, FontStyle.Bold);
                e.CellStyle.ForeColor = Color.Red;
                switch (e.ColumnIndex)
                {
                    case 0:
                        e.Value = "Total";
                        break;

                    case 2:
                        var sum = 0.0d;
                        for (int i = 0; i < this.dataGridView1.NewRowIndex; i++)
                        {
                            var value = this.dataGridView1[2, i].Value;
                            if (value is double)
                            {
                                sum += ((double)value);
                            }
                        }
                        e.Value = Math.Round(sum, 2);
                        break;
                }
            }
        }

    }
}

Вот живой скриншот того, как это работает.

Ваш ответ на вопрос