zoukankan      html  css  js  c++  java
  • How to Bind an ArrayList to a DataGrid

    How to Bind an ArrayList to a DataGrid

    More Information on installing the .Net Framework click here.
    Download full Visual Studio C# .NET Examples from this Article.


    Overview

    Here is a technique for binding an arraylist of objects where the objects contain public property that can appear as columns in the datagrid. In this example, the object contains 2 public doubles, one named "RandomValue" and the other named "SqrtValue". To bind this arraylist to a datagrid, add a custom tablestyle that has a MappingName of "ArrayList", and then use the property names as the MappingName for each column.

    Example

    using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Data;

    namespace Akadia.DataGridArrayList
    {
        public class DataGridArrayList : System.Windows.Forms.Form
        {
            private System.Windows.Forms.DataGrid dataGrid1;
            private ArrayList arrayList1;
            private System.Windows.Forms.Button buttonAddNew;
            private System.Windows.Forms.Button buttonDeleteCurrent;
            private System.ComponentModel.Container components = null;

            public DataGridArrayList()
            {
                InitializeComponent();
            }

            ...
            ...

            [STAThread]
            static void Main()
            {
                Application.Run(new DataGridArrayList());
            }

            // Create and Bind ArrayList to the Datagrid when loading
            private void DataGridArrayList_Load(object sender, System.EventArgs e)
            {
                CreateArrayList();
                BindArrayListToGrid();
            }

            // Create a custom tablestyle and add two columnstyles
            private void BindArrayListToGrid()
            {
                dataGrid1.DataSource = arrayList1;

                DataGridTableStyle ts = new DataGridTableStyle();
                ts.MappingName = "ArrayList";

                int colwidth = (dataGrid1.ClientSize.Width
                    - ts.RowHeaderWidth
                    - SystemInformation.VerticalScrollBarWidth - 5) / 2;

                // Create a column for the "RandomValue" property
                // defined in the RandomNumber Class

                DataGridTextBoxColumn cs = new DataGridTextBoxColumn();
                cs.MappingName = "RandomValue";  // Public property name
                cs.HeaderText = "Random Number";
                cs.Format = "f4";
                cs.Width = colwidth;
                ts.GridColumnStyles.Add(cs);

                // Create a column for the "SqrtValue" property
                // defined in the RandomNumber Class

                cs = new DataGridTextBoxColumn();
                cs.MappingName = "SqrtValue";  // Public property name
                cs.HeaderText = "Square Root";
                cs.Format = "f4";
                cs.Width = colwidth;
                ts.GridColumnStyles.Add(cs);

                // Add the custom tablestyle to the DataGrid
                dataGrid1.TableStyles.Clear();
                dataGrid1.TableStyles.Add(ts);
            }

            private void CreateArrayList()
            {
                arrayList1 = new ArrayList();

                // Add some random Numbers
                Random r = new Random();
                for (int i = 0; i < 20; ++i)
                {
                    arrayList1.Add(new RandomNumber(r.NextDouble()));
                }

            }

            // Create a struct or class that defines what you want in each row
            // the different columns in the row must be public properties

            public class RandomNumber
            {
                private double num;

                // Constructor
                public RandomNumber(double d)
                {
                    num = d;
                }

                // Public Property "RandomValue" used
                // as Column in the DataGrid

                public double RandomValue
                {
                    get{ return num; }
                    set{ num = value;}
                }

                // Public Property "SqrtValue" used
                // as Column in the DataGrid

                public double SqrtValue
                {
                    get {return Math.Sqrt(this.num);}
                }
            }


            // Add a new random Number to the ArrayList and
            // then refresh the DataGrid

            private void buttonAddNew_Click(object sender, System.EventArgs e)
            {
                Random r = new Random();
                arrayList1.Add(new RandomNumber(r.NextDouble()));

                // Refresh the Datagrid with the new random number
                CurrencyManager cm =
                  (CurrencyManager) this.dataGrid1.BindingContext[arrayList1];
                if (cm != null)
                {
                    cm.Refresh();
                }

            }

            // Delete current Entry from the ArrayList.
            private void buttonDeleteCurrent_Click(object sender, System.EventArgs e)
            {
                // Get the current position due to not allow empty datagrid.
                CurrencyManager cm =
                  (CurrencyManager) this.BindingContext[dataGrid1.DataSource];

                if (cm.Count <= 1)
                {
                    return;  // Do not allow an empty DataGrid
                }

                // Place cursor on position up
                int removeAt = cm.Position;
                if (removeAt > 0)
                {
                    cm.Position = removeAt - 1;
                }

                // Remove current Entry
                arrayList1.RemoveAt(removeAt);

                if (cm != null)
                {
                    cm.Refresh();
                }
            }

            // Select the entire row when the user clicks on a cell in the row
            private void dataGrid1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
            {
                System.Drawing.Point pt = new Point(e.X, e.Y);
                DataGrid.HitTestInfo hti = dataGrid1.HitTest(pt);
                if (hti.Type == DataGrid.HitTestType.Cell)
                {
                    dataGrid1.CurrentCell = new DataGridCell(hti.Row, hti.Column);
                    dataGrid1.Select(hti.Row);
                }
            }
        }
    }

  • 相关阅读:
    js笔记——js里var与变量提升
    微信授权机制
    HTML5的sessionStorage和localStorage
    博客园主题响应式布局
    [转]五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT)
    搭建jekyll博客
    Oracle VM VirtualBox技巧
    jQuery实现全选、全不选、反选
    js里slice,substr和substring的区别
    js里cookie操作
  • 原文地址:https://www.cnblogs.com/smallmuda/p/352143.html
Copyright © 2011-2022 走看看