C#快速向datagridview分页控件中添加10万条记录,C#操作控件速度最快的方法

C#如何获取datagridview最后一行第一列数据的值_百度知道
C#如何获取datagridview最后一行第一列数据的值
DataGridView 动态添加新行:DataGridView控件在实际应用中非常实用,特别需要表格显示数据时。可以静态绑定数据源,这样就自动为DataGridView控件添加相应的行。假如需要动态为DataGridView控件添加新行,方法有很多种,下面简单介绍如何为DataGridView控件动态添加新行的两种方法:方法一:int index=this.dataGridView1.Rows.Add();this.dataGridView1.Rows[index].Cells[0].Value = &1&;this.dataGridView1.Rows[index].Cells[1].Value = &2&;this.dataGridView1.Rows[index].Cells[2].Value = &监听&;利用dataGridView1.Rows.Add()事件为DataGridView控件增加新的行,该函数返回添加新行的索引号,即新行的行号,然后可以通过该索引号操作该行的各个单元格,如dataGridView1.Rows[index].Cells[0].Value = &1&。这是很常用也是很简单的方法。方法二:DataGridViewRow row = new DataGridViewRow();DataGridViewTextBoxCell textboxcell = new DataGridViewTextBoxCell();textboxcell.Value = &aaa&;row.Cells.Add(textboxcell);DataGridViewComboBoxCell comboxcell = new DataGridViewComboBoxCell();row.Cells.Add(comboxcell);dataGridView1.Rows.Add(row);2.DataGridView 取得或者修改当前单元格的内容:当前单元格指的是 DataGridView 焦点所在的单元格,它可以通过 DataGridView 对象的 CurrentCell 属性取得。如果当前单元格不存在的时候,返回Nothing(C#是null)// 取得当前单元格内容Console.WriteLine(DataGridView1.CurrentCell.Value);// 取得当前单元格的列 IndexConsole.WriteLine(DataGridView1.CurrentCell.ColumnIndex);// 取得当前单元格的行 IndexConsole.WriteLine(DataGridView1.CurrentCell.RowIndex);另外,使用 DataGridView.CurrentCellAddress 属性(而不是直接访问单元格)来确定单元格所在的行: DataGridView.CurrentCellAddress.Y列:DataGridView.CurrentCellAddress.X 。这对于避免取消共享行的共享非常有用。当前的单元格可以通过设定 DataGridView 对象的 CurrentCell 来改变。可以通过 CurrentCell 来设定DataGridView 的激活单元格。将 CurrentCell 设为 Nothing(null) 可以取消激活的单元格。// 设定 (0, 0) 为当前单元格DataGridView1.CurrentCell = DataGridView1[0, 0];在整行选中模式开启时,你也可以通过 CurrentCell 来设定选定行。/// 向下遍历private void button4_Click(object sender, EventArgs e)...{int row = this.dataGridView1.CurrentRow.Index + 1;if (row & this.dataGridView1.RowCount - 1)row = 0;this.dataGridView1.CurrentCell = this.dataGridView1[0, row];}/// 向上遍历private void button5_Click(object sender, EventArgs e)...{int row = this.dataGridView1.CurrentRow.Index - 1;if (row & 0)row = this.dataGridView1.RowCount - 1;this.dataGridView1.CurrentCell = this.dataGridView1[0, row];}* 注意: this.dataGridView 的索引器的参数是: columnIndex, rowIndex 或是 columnName, rowIndex这与习惯不同。3.DataGridView 行的用户删除操作的自定义:1)无条件的限制行删除操作。默认时,DataGridView 是允许用户进行行的删除操作的。如果设置 DataGridView对象的AllowUserToDeleteRows属性为 False 时,用户的行删除操作就被禁止了。// 禁止DataGridView1的行删除操作。DataGridView1.AllowUserToDeleteRows =但是,通过 DataGridViewRowCollection.Remove 还是可以进行行的删除。补足: 如果 DataGridView 绑定的是 DataView 的话,通过 DataView.AllowDelete 也可以控制行的删除。2)行删除时的条件判断处理。用户在删除行的时候,将会引发 DataGridView.UserDeletingRow 事件。在这个事件里,可以判断条件并取消删除操作。// DataGridView1 的 UserDeletingRow 事件private void DataGridView1_UserDeletingRow( object sender, DataGridViewRowCancelEventArgs e){// 删除前的用户确认。if (MessageBox.Show(&确认要删除该行数据吗?&, &删除确认&,MessageBoxButtons.OKCancel, MessageBoxIcon.Question) != DialogResult.OK){// 如果不是 OK,则取消。e.Cancel =}}4.DataGridView 行、列的隐藏和删除:1) 行、列的隐藏// DataGridView1的第一列隐藏DataGridView1.Columns[0].Visible =// DataGridView1的第一行隐藏DataGridView1.Rows[0].Visible =2) 行头、列头的隐藏// 列头隐藏DataGridView1.ColumnHeadersVisible =// 行头隐藏DataGridView1.RowHeadersVisible = 3) 行和列的删除' 删除名为&Column1&的列DataGridView1.Columns.Remove(&Column1&);' 删除第一列DataGridView1.Columns.RemoveAt(0);' 删除第一行DataGridView1.Rows.RemoveAt(0);4) 删除选中行foreach (DataGridViewRow r in DataGridView1.SelectedRows){if (!r.IsNewRow){DataGridView1.Rows.Remove(r);}}5.DataGridView 列顺序的调整:设定 DataGridView 的 AllowUserToOrderColumns 为 True 的时候,用户可以自由调整列的顺序。当用户改变列的顺序的时候,其本身的 Index 不会改变,但是 DisplayIndex 改变了。你也可以通过程序改变 DisplayIndex 来改变列的顺序。 列顺序发生改变时会引发 ColumnDisplayIndexChanged 事件:// DataGridView1的ColumnDisplayIndexChanged事件处理方法private void DataGridView1_ColumnDisplayIndexChanged(object sender,DataGridViewColumnEventArgs e){Console.WriteLine(&{0} 的位置改变到 {1} &,e.Column.Name, e.Column.DisplayIndex);}6.DataGridView 的右键菜单(ContextMenuStrip):DataGridView, DataGridViewColumn, DataGridViewRow, DataGridViewCell 有 ContextMenuStrip 属性。可以通过设定 ContextMenuStrip 对象来控制 DataGridView 的右键菜单的显示。 DataGridViewColumn 的 ContextMenuStrip 属性设定了除了列头以外的单元格的右键菜单。 DataGridViewRow 的 ContextMenuStrip 属性设定了除了行头以外的单元格的右键菜单。DataGridViewCell 的 ContextMenuStrip 属性设定了指定单元格的右键菜单。// DataGridView 的 ContextMenuStrip 设定DataGridView1.ContextMenuStrip = this.ContextMenuStrip1;// 列的 ContextMenuStrip 设定DataGridView1.Columns[0].ContextMenuStrip = this.ContextMenuStrip2;// 列头的 ContextMenuStrip 设定DataGridView1.Columns[0].HeaderCell.ContextMenuStrip = this.ContextMenuStrip2;// 行的 ContextMenuStrip 设定DataGridView1.Rows[0].ContextMenuStrip = this.ContextMenuStrip3;// 单元格的 ContextMenuStrip 设定DataGridView1[0, 0].ContextMenuStrip = this.ContextMenuStrip4;对于单元格上的右键菜单的设定,优先顺序是: Cell & Row & Column & DataGridView⇒ CellContextMenuStripNeeded、RowContextMenuStripNeeded 事件利用 CellContextMenuStripNeeded 事件可以设定单元格的右键菜单,尤其但需要右键菜单根据单元格值的变化而变化的时候。比起使用循环遍历,使用该事件来设定右键菜单的效率更高。但是,在DataGridView使用了DataSource绑定而且是VirtualMode的时候,该事件将不被引发。// CellContextMenuStripNeeded事件处理方法private void DataGridView1_CellContextMenuStripNeeded(object sender,DataGridViewCellContextMenuStripNeededEventArgs e){DataGridView dgv = (DataGridView)if (e.RowIndex & 0){// 列头的ContextMenuStrip设定e.ContextMenuStrip = this.ContextMenuStrip1;}else if (e.ColumnIndex & 0){// 行头的ContextMenuStrip设定e.ContextMenuStrip = this.ContextMenuStrip2;}else if (dgv[e.ColumnIndex, e.RowIndex].Value is int){// 如果单元格值是整数时e.ContextMenuStrip = this.ContextMenuStrip3;}}同样,可以通过 RowContextMenuStripNeeded 事件来设定行的右键菜单。// RowContextMenuStripNeeded事件处理方法private void DataGridView1_RowContextMenuStripNeeded(object sender,DataGridViewRowContextMenuStripNeededEventArgs e){DataGridView dgv = (DataGridView)// 当&Column1&列是Bool型且为True时、设定其的ContextMenuStripobject boolVal = dgv[&Column1&, e.RowIndex].VConsole.WriteLine(boolVal);if (boolVal is bool && (bool)boolVal){e.ContextMenuStrip = this.ContextMenuStrip1;}}CellContextMenuStripNeeded 事件处理方法的参数中、「e.ColumnIndex=-1」表示行头、「e.RowIndex=-1」表示列头。RowContextMenuStripNeeded则不存在「e.RowIndex=-1」的情况。7.DataGridView 单元格表示值的自定义:通过CellFormatting事件,可以自定义单元格的表示值。(比如:值为Error的时候,单元格被设定为红色)下面的示例:将“Colmn1”列的值改为大写。//CellFormatting 事件处理方法private void DataGridView1_CellFormatting(object sender,DataGridViewCellFormattingEventArgs e){DataGridView dgv = (DataGridView)// 如果单元格是“Column1”列的单元格if (dgv.Columns[e.ColumnIndex].Name == &Column1& && e.Value is string){// 将单元格值改为大写string str = e.Value.ToString();e.Value = str.ToUpper();// 应用该Format,Format完毕。e.FormattingApplied =}}CellFormatting事件的DataGridViewCellFormattingEventArgs对象的Value属性一开始保存着未被格式化的值。当Value属性被设定表示用的文本之后,把FormattingApplied属性做为True,告知DataGridView文本已经格式化完毕。如果不这样做的话,DataGridView会根据已经设定的Format,NullValue,DataSourceNullValue,FormatProvider属性会将Value属性会被重新格式化一遍。8.DataGridView 用户输入时,单元格输入值的设定:通过 DataGridView.CellParsing 事件可以设定用户输入的值。下面的示例:当输入英文文本内容的时候,立即被改变为大写。//CellParsing 事件处理方法private void DataGridView1_CellParsing(object sender,DataGridViewCellParsingEventArgs e){DataGridView dgv = (DataGridView)//单元格列为“Column1”时if (dgv.Columns[e.ColumnIndex].Name == &Column1& &&e.DesiredType == typeof(string)){//将单元格值设为大写e.Value = e.Value.ToString().ToUpper();//解析完毕e.ParsingApplied =}}9.DataGridView 新加行的默认值的设定:需要指定新加行的默认值的时候,可以在DataGridView.DefaultValuesNeeded事件里处理。在该事件中处理除了可以设定默认值以外,还可以指定某些特定的单元格的ReadOnly属性等。// DefaultValuesNeeded 事件处理方法private void DataGridView1_DefaultValuesNeeded(object sender,DataGridViewRowEventArgs e){// 设定单元格的默认值e.Row.Cells[&Column1&].Value = 0;e.Row.Cells[&Column2&].Value = &-&;}10.DataGridView 设定单元格只读:1) 使用 ReadOnly 属性如果希望,DataGridView 内所有单元格都不可编辑, 那么只要:// 设置 DataGridView1 为只读DataGridView1.ReadOnly =此时,用户的新增行操作和删除行操作也被屏蔽了。如果希望,DataGridView 内某个单元格不可编辑, 那么只要:// 设置 DataGridView1 的第2列整列单元格为只读DataGridView1.Columns[1].ReadOnly =// 设置 DataGridView1 的第3行整行单元格为只读DataGridView1.Rows[2].ReadOnly =// 设置 DataGridView1 的[0,0]单元格为只读DataGridView1[0, 0].ReadOnly =2) 使用 EditMode 属性DataGridView.EditMode 属性被设置为 DataGridViewEditMode.EditProgrammatically 时,用户就不能手动编辑单元格的内容了。但是可以通过程序,调用 DataGridView.BeginEdit 方法,使单元格进入编辑模式进行编辑。DataGridView1.EditMode = DataGridViewEditMode.EditP3) 根据条件设定单元格的不可编辑状态当一个一个的通过单元格坐标设定单元格 ReadOnly 属性的方法太麻烦的时候,你可以通过 CellBeginEdit 事件来取消单元格的编辑。// CellBeginEdit 事件处理方法private void DataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e){DataGridView dgv = (DataGridView)//是否可以进行编辑的条件检查if (dgv.Columns[e.ColumnIndex].Name == &Column1& && !(bool)dgv[&Column2&, e.RowIndex].Value){// 取消编辑e.Cancel =}}
其他类似问题
为您推荐:
提问者采纳
&&&&&&&&&&&&var&dgv&=&this.dataGridView1;&&&&&&&&&&&&int&max&=&(int)dgv.Rows[dgv.RowCount&-&1].Cells[0].V
提问者评价
虽然还没弄明白,但确实能达到我的要求!非常感谢
来自团队:
datagridview的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁C#DataGridView 行记录上下移动
C#DataGridView 行记录上下移动
&467人阅读&&&&经过自己一番简单的研究,发现在C#中实现很容易。自己临时写的,可能方法不是很好,但基本实现了预期的效果。[csharp]&[csharp]&
发表评论:
TA的最新馆藏[转]&[转]&[转]&[转]&[转]&[转]&C# DataGridView控件操作
一、怎么在DataGridView中添加行和列字段?
1、向DataGridView中添加列字段方法
鼠标选中DataGridView,单击右键-&添加列。
然后会弹出一个&添加列&对话框。对话框中的&名称(N):&是此列在代码中的名字;
对话框中的&页眉文本(H):&是在DataGridView中显示的;
对话框中的&类型(T):&是次列字段的值类型.共有6中类型,分别是:
DataGridViewTextBoxColumn(string类型,如果输入的数字,你可以用强制类型转换成int类型)、DataGridViwLinkColumn(点击到LinkColumn列中的值就触发定义的事件)、
DataGridViewImageColumn(显示代码中指定的图片)、
DataGridViewComboBoxColumn(在ComboBoxColumn的字段中显示下拉列表)、
DataGridViewCheckBoxColumn(在CheckBoxColumn列中显示复选框)、
DataGridViewButtonColumn(在ButtonColumn列中显示一个Button).
i:怎么去掉DataGridView最左边的&*&符号和小三角符号?
选中DataGridViw,点击右键-&属性,找到其属性RowHeaderVisible(默认值:true),该变值为False即可。
ii:怎么禁止用户自己添加行数?
选中DataGridViw,点击右键-&属性,找到其属性AllowUserToAddRows(默认值:true),该变值为False即可。
2、向DataGridView中添加行方法
&在程序中(一般是构造函数)添加:this.dataGridView1.Rows.Add(false).
i:怎么设置每行每个字段的值?eg:DataGridView控件名字为dataGridView1.
this.dataGridView1.Rows[0].Cells[0].Value
this.dataGridView1.Rows[0].Cells[1].Value
this.dataGridView1.Rows[0].Cells[2].Value
ii:在DataGridView中怎么默认选中列中的复选框?
eg:添加代码:this.dataGridView1.Rows[index].Cells[index].Value = 1;
&&最后修改于
请各位遵纪守法并注意语言文明C#&当控件被数据绑定时,无法以编程方式向&DataGridView&的行集合中添加行。
C#中关于dataGridView控件绑定数据后新增行的问题
在C#2010的编程中,如果你用到DataGridView的时候,如果不绑定数据,那在加载数据到此控件的时候会很慢,一闪一闪的,但如果你做了绑定,但DataGridView又不能执行如DataGridView1.Rows.Add();语句,一执行DataGridView1.Rows.Add();语句会报错如下:
当控件被数据绑定时,无法以编程方式向 DataGridView 的行集合中添加行。
今天我也遇到这个问题,于上网上参考了很多同志的讨论和答复,基本上都要么说一半,要么没说的不清,贴出来的代码我执行过都有问题,自己研究了一下实际上这个时候用直接操作Tables就可以,代码如下:
&&&&&&&&&&&
private DataSet dss = new DataSet();
&&&&&&&&&&&&dss
= oper.GetDataSetZC(); //这里的oper.GetDataSetZC()是自义函数,抓数据用的
&&&&&&&&&&&
this.dataGridView1.DataSource =
dss.Tables[0].DefaultV //第一次加载数据到控件,也就是这样加载之后,后面不解除绑定你就没法新增行
&&&&&&&&&&&
//*********************************下面的代码就解决这个问题************************
&&&&&&&&&&&
dataGridView1.DataSource = null;&//这里先将DataSource置空,实际上相当于解除绑定。实际上此时可以用DataGridView1.Rows.Add();
但是此时用这个语句后又没表头,所以不是想要的,故不用DataGridView1.Rows.Add();&
&&&&&&&&&&&
dss.Tables[0].Rows.Add("A","AA");&//注意这里的dss为DataSet,而且不是空的,Tables[0]里的行是有格式的,所以dss.Tables[0].Rows.Add("A","AA");里的"A","AA"要对应相应的字段,字段类型一定要匹配,不然会报错
&&&&&&&&&&&
dataGridView1.DataSource =
dss.Tables[0].DefaultV&//重新加载数据到dataGridView1控件中,执行完这句你就会发现你添加成功了。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。54002人阅读
private void button4_Click(object sender, EventArgs e)
string str_con = @"Data Source=26-3BB/SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=testDB;";
//语句字符串
string sql = "select * from danwei";
// string sql = string.Format("insert into danwei (danwei) values ('{0}')", textBox1.Text);
&&&&&&&&&&//
SqlConnection conn = new SqlConnection(str_con);
conn.Open();
SqlCommand comm = new SqlCommand(sql, conn);
SqlDataAdapter da = new SqlDataAdapter(comm);
&&&&&&&&&& DataSet ds = new DataSet();
da.Fill(ds, "danwei");
dataGridView1.DataSource =
dataGridView1.DataMember = "danwei";
//---------------的代码--------------------
//控件第一列的列头文字
dataGridView1.Columns[0].HeaderText = "
控件第一列的列宽
dataGridView1.Columns[0].Width = 80;
控件第二列的列头文字
dataGridView1.Columns[1].HeaderText = "
//控件第二列绑定的数据集中第一个数据表的第二列的数据
//数据集是一个多表的集合
dataGridView1.Columns[1].DataPropertyName = ds.Tables[0].Columns[1].ToString();
控件第二列的列宽
dataGridView1.Columns[1].Width = 300;
conn.Close();
button4_Click(object sender, EventArgs e)
dataGridView1.Columns[0].HeaderText = "
dataGridView1.Columns[0].DataPropertyName = ds.Tables[0].Columns[1].ToString();
dataGridView1.Columns[0].Width = 80;
dataGridView1.Columns[1].HeaderText = "
dataGridView1.Columns[1].DataPropertyName = ds.Tables[0].Columns[0].ToString();
dataGridView1.Columns[1].Width = 300;
button4_Click(object sender, EventArgs e)
//dataGridView1.Columns[0].DataPropertyName = ds.Tables[0].Columns[1].ToString();
dataGridView1.Columns[0].Width = 80;
dataGridView1.Columns[1].HeaderText = "
//dataGridView1.Columns[1].DataPropertyName = ds.Tables[0].Columns[0].ToString();
// dataGridView1.Columns[1].Width = 300;
int coun = dataGridView1.RowC
for (int i = 0; i & coun - 1; i++)
dataGridView1.Rows[i].Cells[0].Value = i + 1;
&dataGridView1.Rows[i].Cells["danweiid"].Value = i + 1;
DataGridView
DataGridView
DataGridView
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:147039次
积分:1482
积分:1482
排名:第18990名
原创:21篇
转载:14篇
评论:77条
(2)(2)(1)(3)(2)(1)(1)(1)(3)(3)(3)(5)(1)(2)(1)(4)

我要回帖

更多关于 treedatagridview控件 的文章

 

随机推荐