有个问题,就是要在DataGridView指定的单元格内使用指定的组件编辑该单元格的值,要求不能对其他的单元格产生影响,
网上大部分代码都是重写DataGridView的列和单元格模板,这样会导致整个列的单元格都受到影响刚在网上找到一段代码:
原文在这
http://www.dotblogs.com.tw/puma/archive/2008/11/10/5943.aspx
大体意思是,新建一个控件,该把该控件的坐标和大小设置了和单元格一样,显示这个控件后就会把单元格覆盖掉,选择了值后再把该控件隐藏我实验的代码using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Storage.Module;
namespace Storage.Forms
{
public partial class TestForm : Form
{
DateTimePicker MyDateTimePicker = new DateTimePicker();
DataTable Table = new DataTable(); public TestForm()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
Table = DatabaseManager.getDataSet("select * from Human").Tables[0];
dataGridView1.DataSource = Table;
} private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
Rectangle r = this.dataGridView1.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, false); r = this.dataGridView1.RectangleToScreen(r); this.MyDateTimePicker.Location = this.RectangleToClient(r).Location; this.MyDateTimePicker.Size = r.Size;
//this.d.Text = this.dataGridView1.CurrentCell.Value.ToString();
this.MyDateTimePicker.Visible = true;
}
}
}我的代码总是显示不了新建的控件,请问下应该怎么改
网上大部分代码都是重写DataGridView的列和单元格模板,这样会导致整个列的单元格都受到影响刚在网上找到一段代码:
原文在这
http://www.dotblogs.com.tw/puma/archive/2008/11/10/5943.aspx
大体意思是,新建一个控件,该把该控件的坐标和大小设置了和单元格一样,显示这个控件后就会把单元格覆盖掉,选择了值后再把该控件隐藏我实验的代码using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Storage.Module;
namespace Storage.Forms
{
public partial class TestForm : Form
{
DateTimePicker MyDateTimePicker = new DateTimePicker();
DataTable Table = new DataTable(); public TestForm()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
Table = DatabaseManager.getDataSet("select * from Human").Tables[0];
dataGridView1.DataSource = Table;
} private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
Rectangle r = this.dataGridView1.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, false); r = this.dataGridView1.RectangleToScreen(r); this.MyDateTimePicker.Location = this.RectangleToClient(r).Location; this.MyDateTimePicker.Size = r.Size;
//this.d.Text = this.dataGridView1.CurrentCell.Value.ToString();
this.MyDateTimePicker.Visible = true;
}
}
}我的代码总是显示不了新建的控件,请问下应该怎么改
只要加上dataGridView1.Controls.Add(MyDateTimePicker); 就行了
table.Columns.AddRange(new DataColumn[] {
new DataColumn("id"),
new DataColumn("name"),
new DataColumn("datetime")});for (int i = 0; i < 20; i++)
{
table.Rows.Add(new object[] {
i, string.Format("value {0}",i), DateTime.Now});
}this.dataGridView1.DataSource = table;
this.dataGridView1.AutoGenerateColumns = true;DateTimePicker dtp = new DateTimePicker();
dtp.Visible = false;this.dataGridView1.Controls.Add(dtp);this.dataGridView1.CellBeginEdit += (obj, args) =>
{
if (args.ColumnIndex == 2)
{
Rectangle rect =
this.dataGridView1.GetCellDisplayRectangle(
args.ColumnIndex, args.RowIndex, false); dtp.SetBounds(rect.Left, rect.Y, rect.Width, rect.Height);
dtp.Value = DateTime.Parse(
this.dataGridView1.Rows[args.RowIndex]
.Cells[args.ColumnIndex].Value.ToString());
dtp.Visible = true;
}
};this.dataGridView1.CellEndEdit += (obj, args) =>
{
this.dataGridView1.Rows[args.RowIndex]
.Cells[args.ColumnIndex].Value = dtp.Value; dtp.Visible = false;
};this.dataGridView1.ColumnWidthChanged += (obj, args) =>
{
if (dtp.Visible) dtp.Width = args.Column.Width;
};