在平时开发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();