datagridview
データバインドされていないに列フッターを追加する方法はありますか?在庫を追加するためのユーザー入力を取得するために使用しています。現在、合計を表示するためにラベルを使用していますが、可能であればフッターに変更したいと思います。
18252 次
3 に答える
7
私は以前に同じ問題に遭遇し、長い検索の後に気づきました。
Winform Datagridviewは、フッターの追加をサポートしていません。
要約を保持できる行を追加しようとしましたが、それでもうまくいきませんでした。
2つのグリッドがあり、下のグリッドが要約を保持するユーザーコントロールを作成できます。
解決 -
データバインディングを使用した私のソリューション。(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 に答える