Tag: datagridview

如何从datagridview textchanged事件中的当前单元格中获取文本?

我正在制作一个Windows表单应用程序,其中我使用了datagridview。 我希望当我在datagridview中的文本框中写一些东西,而不是出现包含我写的字符串的消息框.. ican’t在textchanged事件中获取我的文本.. 所有的东西都必须在textchanged事件中触发..这是我的代码: – void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { if (dataGridView1.CurrentCell.ColumnIndex == 1) { TextBox tb = (TextBox)e.Control; tb.TextChanged += new EventHandler(tb_TextChanged); } } void tb_TextChanged(object sender, EventArgs e) { //listBox1.Visible = true; //string firstChar = “”; //this.listBox1.Items.Clear(); //if (dataGridView1.CurrentCell.ColumnIndex == 1) { string str = dataGridView1.CurrentRow.Cells[“Column2”].Value.ToString(); if (str != “”) { MessageBox.Show(str); […]

C#DataGridView:将多行合并为一行但保留原件

首先:一旦我完成,我将自己提供这个问题的答案。 但是你可以在我的路上帮助我,我会感谢你的所有建议。 我有一个DataGridView与不同的行属于一起。 我的问题是找到一种合适的方式来显示和使用这些连接的行。 我的第一个想法是保持每一行的个性,但这有一些缺点: 如何清楚地显示行属于一起? 我可以添加另一列,其单元格显示连接行的相同数字,但这不容易看到,需要另一列。 我的解决方案是所有连接的行具有相同的背景颜色,并且对于每组连接的行,颜色在白色和浅灰色之间变化。 如何使用连接的行? 一旦我选择了一行的一行,我就必须通过提取哪些行属于一起的信息(保存在单元格的标签或隐藏的单元格中)来分析这一行,并选择它们。 在DataGridView中向上/向下移动行的工作量更大:我还需要分析相邻的行集以查看我必须移动多远。 因此我决定创建一个DataGridViewMultiRow 。 完成后,我将在这里发布该类的完整代码作为答案。 它将inheritanceDataGridViewRow (“DGVR”)并存储单个DGVR或其他多行的列表,并通过自己的代码绘制行的单元格将它们显示为一个。 但是,我仍然需要找出用于此目的的事件。 MSDN建议使用DataGridView.RowPrePaint ,但我更想使用绑定到DGVR本身的事件。 也许我会分析DataGridViewRow.Paint()的源代码并编写我自己的方法…… 当添加到多行时,单行将变为不可见(它们可以通过滥用概念再次切换到可见,但.net本身有很多不受滥用的保护;也许我甚至不切换看不见,所以这是用户的责任)。 通过强制每个DGVR成为与多行相同的DGV的一部分,可以简单地避免多行中的递归,并且因为每行只能添加到一个DGV并且只能添加一次,所以我不必检查递归了。 现在我正在努力如何实现内部行列表。 我正在考虑使用.net DataGridViewRowCollection ,但我发现它的操作与DataGridView本身紧密绑定:DGV只能有一个DGVRColl,但每个DGVRColl都引用一个DGV。 因此,我的每个DGVMultiRow中都会有半连接的DGVRColl。 我要问这是否会引起问题,但我已经发现在实例化DGVRColl时我必须提供一个DGV,这是DGVMultiRow ctor被调用的那一刻我没有的。 此外,当使用DGVRColl并为其提供公共get属性时,我只能挂钩’CollectionChanged’事件并且无法控制各个操作,如Add()和Remove() 。 所以我将使用一个简单的私人列表。 继续#1 我完成了主要工作,看起来已经很不错了: 我仍然需要修复细节,比如在移动滚动条和其他小东西时正确放置文本。 我决定不覆盖DataGridViewRow.Paint()因为那个内部连接太多了。 所以我第一次使用CellPainting事件,这是一个良好的开端。 但是我需要同时拥有该行的所有单元格的信息,所以我按照MSDN的建议继续覆盖DataGridView.RowPrePaint() ,请参阅上面的链接。 这非常有效。 未完待续。

使用C#在DatagridView中合并多个行标题

我有一个项目,我需要从数据库中查看Datagridview中的数据,它应该看起来像甘特图。 我想让Datagridview看起来像这样: Datagridview示例 我已经尝试过很多来自互联网的代码,但没有任何工作正常 例如: https : //social.msdn.microsoft.com/Forums/windows/en-US/87004d70-482a-4b86-ba18-371670254b6a/how-to-merge-headers-in-a-datagridview?forum = winformsdatacontrols 此外,我不知道如何将日值输入单元格/行标题 这就是我从一个月开始的日子 int year = DateTime.Now.Year; int Jan = 1; int daysInJan = System.DateTime.DaysInMonth(year, Jan);

如何为列添加值并更新数据库

我试图将dataGridViewAFp1中的Annual_Fees列的值添加到我转换为整数的文本框txtp1AF.Text中的新值AF2 。 然后,添加ResultAF的结果将转换回字符串updatedAF ,这是要在数据库中更新的值。 我将变量AF11初始化为0.查询确实更新了所选列。 想法是获得AF2中的任何值,并将其添加到该列和行中的任何值,具体是我在数据库中放入AF11 ,因此更新值updatedAF 。 这是我到目前为止所做的,但似乎没有起作用。 这些值没有加起来。 private void btnEnterAFp1_Click(object sender, EventArgs e) { if (string.IsNullOrWhiteSpace(txtp1AF.Text)) { MessageBox.Show(“Please Enter fee”,”Oops”,MessageBoxButtons.OK,MessageBoxIcon.Warning); } else { if (dataGridViewAFp1.Rows[0].Cells[“Annual_Fees”].Value != null) { conn.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; int.TryParse(dataGridViewAFp1.Rows[0].Cells[“Annual_Fees”].Value.ToString(), out AF11); AF2 = Convert.ToInt32(txtp1AF.Text); ResultAF = AF11 + AF2; String updatedAF = Convert.ToString(ResultAF); […]

仅向第二列添加行 – 使用for循环填充数据

我根据读取已打开文件的记录数量,使用for循环计算第二列中我想要的行数。 我已经研究并尝试了各种解决方案,但没有任何作用,但它似乎很简单。 下面是我当前的代码,我在其中检索文件的长度并快速求和,输入for循环,此时(目前)我只能填充第一列。 long Count = 1; FileInfo Fi = new FileInfo(file); long sum = (Fi.Length / 1024) – Count; for (int i = 0; i < sum; i++) { DataGridView1.Rows.Add(Count++); } 我不知道怎么做但我知道上面的代码默认添加到第一列 – 我不知道如何修改它。 我知道: DataGridView1.Rows.Add(“a”,”b”); …’b’值显示在第二列,但我现在不想要’a’所在的第一列。 我已经看过插入一行有一列datagridview c#,但它与合并列有关,再次,我不想要这个。 DataGridView1.Rows.Add(“”,Count++); 在某种程度上起作用,但不是正确的方法。 我将在稍后将数据添加到第一列。

自定义DataGridView单元格绘画

我正在尝试绘制自己的网格线,因为我想要比默认数据网格视图线更粗的线。 这是我用来做的代码: private void dgv_Wafer_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) { using (Pen p = new Pen(Brushes.Black, 12)) { e.Graphics.DrawLine(p, new Point(0, e.CellBounds.Bottom), new Point(e.CellBounds.Right, e.CellBounds.Bottom)); } using (Pen p = new Pen(Brushes.Black, 6)) { e.Graphics.DrawLine(p, new Point(e.CellBounds.Right, 0), new Point(e.CellBounds.Right – 1, e.CellBounds.Bottom)); } } 绘制线条但不会在最后一列绘制水平线条,并且不会在最后一行绘制垂直线条。 这些线条创建的网格是一个列,行太小。 有谁知道如何解决这一问题?

如何在datagridview中为单元格创建页脚

我需要使用包含两个部分的单元格创建DataGridView。 一部分是该单元格的内容,例如0,1等值。 剩下的部分是该单元格的页脚,就像单词文档的页脚一样,指的是该单元格的序数。 我无法附上任何图像,因此问题可能含糊不清。 无论如何,提前谢谢。

DataGridViewComboBoxCell手动设置值,值无效

这是我的代码: private class Person { private string myName; private int myValue; public Person(string name, int value) { myName = name; myValue = value; } public override string ToString() { return myName; } public string Name { get { return myName; } set { myName = value; } } public int Value { get { return […]

DataGridView使用c#成为Linq的ReadOnly

我正在使用带有entity framework工作的C#(Windows窗体)和Linq实现一个系统。 使用普通linq语句时, DataGridView运行良好,但当我使用“Join”时, DataGridView变为只读,我无法编辑任何内容。 示例:DataGridView适用于此语句: var query = from d in db.Device select d; dgvDevices.DataSource = query.ToList(); 但它使用此查询变得不可编辑: var query = from u in db.Users join d in db.Device on u.id equals d.AssignedTo select new { d.id, d.Name, d.OwnerName, d.OwnerPhoneNumber, d.Details, User = u.Name }; dgvDevices.DataSource = query.ToList();

如何在上面一行的特定单元格填充后向数据视图添加新行?

我正在使用C#(.NET 4.0)开发桌面应用程序。 我有一个datagridview填充自定义对象,通过自定义(它inheritanceBindingList)BindingList(添加排序function)。 我使用cellValidating事件来正确地增加第一列(ID)并validation对其他单元格的输入。 问题是当我到达新行/最后一行并在一个单元格中输入内容时(我甚至可以在离开单元格之前删除所有输入)datagridview会自动将此行添加到绑定列表并在下面创建一个新行。 我希望只在正确填充上面的行(上一个新行)时添加最后一个/新行。 例 ID NAME PRICE … 1 Beer 2.6 2 Cheese 3.3 _ _______ ____ <- empty row 现在,如果我单击(输入),新行ID将自动设置为3,如果我将“点击”保留为“啤酒”单元格,则新行ID为空,所有默认值均为空(这是它应该和工作的方式)。 问题是如果单击/输入新行并为名称键入内容(即使我在离开单元格之前删除了内容),也会在此行下方添加一个新行,即新行。 因此,此行被添加到BindingList并且不完整,在正确填充所有必需单元格(例如价格)之前不应添加该行。 我不知道该怎么做。 请帮帮我,我对C#很新。 谢谢你的时间和答案。