现在的位置: 首页 > 综合 > 正文

Device Application中只能使用DataGrid,非常不好用,特別是對行和列的操作。现举一通俗易懂的例子

2013年12月07日 ⁄ 综合 ⁄ 共 5896字 ⁄ 字号 评论关闭

在平时开发Device Application时,往往回用到DataGrid.而使用时非常不好操作。平时,亦有经常同事会问有何好的解决方案。现在做了个实例,包括了对DataGrid的数据添加、更改和删除的解决方案。当然,如果你有更好的解决方法的,不如也show出来供大家参考参考。

 

--------------------------------------------------

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace DeviceApplication1
{
    public partial class Form1 : Form
    {
        DataTable dt;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            InitDataGridColumnHeader();
            try
            {
                DataSet ds = new DataSet();
                ds.Tables.Add("Role");
                ds.Tables["Role"].Columns.Add("id", typeof(int));
                ds.Tables["Role"].Columns.Add("rle_cUserName", typeof(string));
                ds.Tables["Role"].Columns.Add("rle_cAddress", typeof(string));
                ds.Tables["Role"].Columns.Add("rle_cTelephone", typeof(string));
               
              
                DataRow dr;
                dr = ds.Tables["Role"].NewRow();

                //添加第一行
                dr["rle_cUserName"] = "1111";
                dr["rle_cAddress"] = "sdf";
                dr["rle_cTelephone"] = "dfdsf";
                ds.Tables["Role"].Rows.Add(dr);
                  //添加第二行

                dr = ds.Tables["Role"].NewRow();
                dr["rle_cUserName"] = "2222";
                dr["rle_cAddress"] = "wer";
                dr["rle_cTelephone"] = "seds";
                ds.Tables["Role"].Rows.Add(dr);
                 //添加第三行

                dr = ds.Tables["Role"].NewRow();
                dr["rle_cUserName"] = "3333";
                dr["rle_cAddress"] = "sdfsdf";
                dr["rle_cTelephone"] = "sdfsdf";
                ds.Tables["Role"].Rows.Add(dr);
               

               //为每行添加序号,其实这个难倒很多人

                for (int i = 0; i < ds.Tables["Role"].Rows.Count; i++)
                {
                    ds.Tables["Role"].Rows[i]["id"] = i + 1;
                }

                dt = new DataTable();
                dt = ds.Tables["Role"];
               

                //绑定
                dataGrid1.DataSource = ds.Tables["Role"];

               

                //注意,在此种DataGrid中没有属性设置选择模式
                dataGrid1.Select(0);
                           
            }
            catch (SqlException ex)
            {
                textBox1.Text = ex.StackTrace;
                
            }
         

        }

        /// <summary>
        /// 在DataGrid中根据ID更新一行
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnUpdate_Click(object sender, EventArgs e)
        {
            
            DataRow[] dr = dt.Select("id = " + dataGrid1[dataGrid1.CurrentRowIndex,0]);
            dr[0]["rle_cUserName"] = "UDP" + dataGrid1.CurrentRowIndex;
            dr[0]["rle_cAddress"] = "UDP" + dataGrid1.CurrentRowIndex;
            dr[0]["rle_cTelephone"] = "UDP" + dataGrid1.CurrentRowIndex;
            dataGrid1.DataSource = dt;

        }

        /// <summary>
        /// 选中一行后,删除对应的行
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnDel_Click(object sender, EventArgs e)
        {

            int a;           
            a = dataGrid1.CurrentRowIndex;

            
            //MessageBox.Show("没有选择行!" + a, "提示");
           
            dt.Rows.RemoveAt(a);

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                dt.Rows[i]["id"] = i + 1;
                dataGrid1.Select(dataGrid1.CurrentRowIndex);
            }
            dataGrid1.DataSource = dt;
            if (dt.Rows.Count == 0)
            {
                btnDel.Enabled = false;
            }
        }

        /// <summary>
        /// 为DataGrid中添加一行
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
         private void btnAdd_Click(object sender, EventArgs e)
        {
            DataRow dr = dt.NewRow();
            dr["id"] = dt.Select().Length + 1;
            dr["rle_cUserName"] = "Add" + dt.Select().Length +1;
            dr["rle_cAddress"] = "sdfsdf";
            dr["rle_cTelephone"] = "sdfsdf";
            dt.Rows.Add(dr);
            dataGrid1.DataSource = dt;
            btnDel.Enabled = true;
        }

 

        /// <summary>
        /// 初时化DataGrid的列表头
        /// </summary>
        private void InitDataGridColumnHeader()
        {
            DataGridTableStyle dts = new DataGridTableStyle();            
            dts.MappingName = "Role";   //指定Grid的Table名称
            dataGrid1.TableStyles.Add(dts);
            dataGrid1.TableStyles[0].GridColumnStyles.Clear();

            DataGridTextBoxColumn id = new DataGridTextBoxColumn();
            id.Width = 80;
            id.HeaderText = "ID";
            id.MappingName = "id";
            dataGrid1.TableStyles[0].GridColumnStyles.Add(id);

            DataGridTextBoxColumn userName = new DataGridTextBoxColumn();
            userName.Width = 80;
            userName.HeaderText = "UserName";
            userName.MappingName = "rle_cUserName";

            dataGrid1.TableStyles[0].GridColumnStyles.Add(userName);

            DataGridTextBoxColumn address = new DataGridTextBoxColumn();
            address.Width = 200;
            address.HeaderText = "Address";
            address.MappingName = "rle_cAddress";

            dataGrid1.TableStyles[0].GridColumnStyles.Add(address);

            DataGridTextBoxColumn tel = new DataGridTextBoxColumn();
            tel.Width = 100;
            tel.HeaderText = "Tel";
            tel.MappingName = "rle_cTelephone";

            dataGrid1.TableStyles[0].GridColumnStyles.Add(tel);

        }

        private void dataGrid1_Click(object sender, EventArgs e)
        {
            if (dt.Rows.Count > 0)
            {
                dataGrid1.Select(dataGrid1.CurrentRowIndex);
            }
        }

    }
}

 

-----------------------------------------------------------------------------------------------------------------------------------

另外,补充:

获取当前行第一列值:string   value   =   this.DataGrid1[this.DataGrid1.CurrentRowIndex,   0].ToString();
获得当前单元格值  :string   value   =   this.DataGrid1[this.DataGrid1.CurrentCell].ToString();

抱歉!评论已关闭.