我正在学习VB.NET.
尝试设置CurrentCell的值时,我遇到了DataGridView组件的问题.我想要做的是:
我有一个DataGridView值.我想在我的表单中创建一个按钮,当点击它时,我想将选择从当前行更改为下一行.要解释更多,通过单击我的按钮,我想模拟鼠标单击DataGridview的效果.
我希望你能帮帮我,
谢谢!
我有一个包含大量数据的绑定DataGridView.问题是某些单元格必须是ReadOnly,当用户在单元格之间使用TAB或ENTER导航时,应绕过ReadOnly单元格.在装载后,制作某些特定细胞的最佳方法是什么?
在设置DataSource之后循环遍历单元并不是一个好主意,考虑到网格有大量数据.此外,在CellEnter上创建单元格ReadOnly不起作用,因为当使用TAB键导航时,我必须已经知道下一个单元格是否为ReadOnly.
当DataGrid的源更新时会触发哪个事件?我已经尝试过DataContextChanged和SourceUpdated,但它从未解决过.
其实我需要一个简单的事情.我想,如果有新行,请将GridView的滚动条向下滚动到底部以查看它是什么.
这是在C#中.如果我在DataGridView中使用DataGridViewRow.Selected = true选择一行,则该行选择正常,但"列标题"(灰色最左边的列)中的箭头不会跟随.我该怎么设置?
另一个问题:如果我在设计器中将列格式设置为"居中",则列标题仍然保持对齐.如何将列标题设置为居中?
谢谢,Brian
我以编程方式将列添加到DataGridView,然后绑定到列表.默认情况下,列的SortMode是自动的.但是,当我运行我的应用程序时,单击标题无效.向上/向下箭头未显示.从阅读MSDN,关于自动排序的说法并不多.他们详细介绍了程序化排序.所以,我假设自动方式应该很容易.MSDN继续说" 除非使用列标题进行选择,否则单击列标题会自动按此列对DataGridView进行排序,并显示一个指示排序顺序的字形." 这到底是什么意思呢?我可以设置与排序冲突的网格属性吗?我错过了什么?
AutoGenerateColumns = false;
AllowUserToAddRows = false;
AllowUserToDeleteRows = false;
AllowUserToResizeRows = false;
AllowUserToResizeColumns = false;
ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
ReadOnly = true;
MultiSelect = false;
RowHeadersVisible = false;
SelectionMode = DataGridViewSelectionMode.FullRowSelect;
CellBorderStyle = DataGridViewCellBorderStyle.None;
DataGridViewTextBoxColumn idColumn = new DataGridViewTextBoxColumn();
idColumn.HeaderText = "ID";
idColumn.DataPropertyName = "IDNumber";
DataGridViewTextBoxColumn nameColumn = new DataGridViewTextBoxColumn();
nameColumn.HeaderText = "Name";
nameColumn.DataPropertyName = "Description";
DataGridViewTextBoxColumn lastModifiedColumn = new DataGridViewTextBoxColumn();
lastModifiedColumn.HeaderText = "Last Modified";
lastModifiedColumn.DataPropertyName = "Date";
Columns.Add(idColumn);
Columns.Add(nameColumn);
Columns.Add(lastModifiedColumn);
List<IMyObject> bindingList = GetMyList(); …Run Code Online (Sandbox Code Playgroud) 我有一个datagridview由存储过程填充的.通常我会使用"编辑列"对话框重新排序列,但这datagridview用于显示来自不同来源的数据,所以我不能这样做.
我已经想出如何重命名Headers并使某些列为Frozen但是如何更改它们的显示顺序?
在DataGridView中,即使将网格设置为只读,行标题上也会出现一个黑色三角形,显示在当前行中.
我想避免它被显示,我也想避免由三角形引起的那些单元格的大填充.我猜填充是由三角形引起的,因为单元格的填充为0.
这样做是否可行?怎么样?
谢谢!
编辑
这是创建行标题文本的方式:
for (int i = 0; i < 5; i++)
{
DataGridViewRow row = new DataGridViewRow();
row.HeaderCell.Value = headers[i];
dataGridView1.Rows.Add(row);
}
Run Code Online (Sandbox Code Playgroud)
和headers它的一个简单的阵列串.(string[])
我有一个绑定到ObjectDataSource的DataGridView,其中一些列被隐藏,包括ID列.问题是,即使将其visible属性设置为false,ID列也会显示.有没有人遇到过这个问题?将宽度设置为零不是一个选项,因为网格不允许宽度小于5像素宽的列,因此无论如何它仍然显示网格上的列.
奇怪的是ID列并不总是显示.在我的应用程序上工作了一点后,列再次出现.
DataGridView未设置为自动生成列.我正在构建到.NET和C#的4.0版本.
这是表单构造函数中的代码.
dgvActiveMiners.AutoGenerateColumns = false;
dgvAvilableMiners.AutoGenerateColumns = false;
dgvOperationResults.AutoGenerateColumns = false;
dgvActiveMiners.Columns["dgvActiveMinersRecordId"].Visible = false;
dgvAvilableMiners.Columns["dgvAvilableMinersRecordId"].Visible = false;
dgvOperationResults.Columns["dgvOperationResultRecordId"].Visible = false;
Run Code Online (Sandbox Code Playgroud)
这是生成的网格代码.
this.dgvOperationResults.AllowUserToAddRows = false;
this.dgvOperationResults.AllowUserToDeleteRows = false;
this.dgvOperationResults.AutoGenerateColumns = false;
this.dgvOperationResults.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dgvOperationResults.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.dgvOperationResultRecordId,
this.nameDataGridViewTextBoxColumn2,
this.typeIdDataGridViewTextBoxColumn,
this.amountDataGridViewTextBoxColumn,
this.operationIdDataGridViewTextBoxColumn});
this.dgvOperationResults.DataSource = this.operationResultBindingSource;
this.dgvOperationResults.Location = new System.Drawing.Point(12, 40);
this.dgvOperationResults.MultiSelect = false;
this.dgvOperationResults.Name = "dgvOperationResults";
this.dgvOperationResults.ReadOnly = true;
this.dgvOperationResults.Size = new System.Drawing.Size(498, 247);
this.dgvOperationResults.TabIndex = 16;
Run Code Online (Sandbox Code Playgroud)
我不知道还有什么我可以错过的?
谢谢!
我想根据加载时的特定条件更改DGV行的背景颜色,即使在Windows窗体中也是如此.但我看不到任何DGV行的颜色变化.谁能告诉我怎样才能解决这个问题?
private void frmSecondaryPumps_Load(object sender, EventArgs e)
{
try
{
DataTable dt = DeviceData.BindData("SECONDARY_PUMPS".ToUpper());
dataGridView1.DataSource = dt;
foreach (DataGridViewRow row in dataGridView1.Rows)
{
foreach (DataGridViewColumn column in dataGridView1.Columns)
{
if (row.Cells[column.Name] != null)
{
if (row.Cells[column.Name].Value.ToString() == "ON")
row.DefaultCellStyle.BackColor = System.Drawing.Color.Green;
if (row.Cells[column.Name].Value.ToString() == "OFF")
row.DefaultCellStyle.BackColor = System.Drawing.Color.Red;
}
}
}
dataGridView1.Refresh();
}
catch (Exception err)
{
MessageBox.Show(err.Message);
}
}
Run Code Online (Sandbox Code Playgroud) 我有很多与datagrid的数据源绑定有关的问题.我有一个DatagridView,我从列表中设置DataSource
List<Myclass> li = new List<MyClass>();
MyClass O = new MyClass();
O.Name = "Aden";
O.LastName = "B";
O.Id = 12;
li.Add(O);
O = new MyClass();
O.Name = "Li";
O.LastName = "S";
O.Id = 22;
li.Add(O);
Mydgv.DataSource = li;
Run Code Online (Sandbox Code Playgroud)
MyClass的地方
public Class MyClass
{
public string Name {get; set;}
public string LastName {get; set;}
public decimal Id {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
现在想要添加一个新的行到我的DataGridView
DataGridViewRow row = (DataGridViewRow)yourDataGridView.Rows[0].Clone();
row.Cells[0].Value = "XYZ";
row.Cells[1].Value = 50.2;
Mydgv.Rows.Add(row);
Run Code Online (Sandbox Code Playgroud)
但它是不可能的,因为它引发错误的数据源的DataGrid与列表绑定里.所以我的第一个问题是我怎么能这样做?
我的第二个问题是,为了做到这一点,我提出了一个解决方案来改变我的List li并向其添加新行数据,然后将其设置为datagrid的数据源,但我认为它不是一个可行的解决方案是否有更好的解决方案?
甚至试图通过CurrencyManager来做到这一点
CurrencyManager …Run Code Online (Sandbox Code Playgroud) datagridview ×10
c# ×7
winforms ×5
.net ×3
data-binding ×1
datasource ×1
events ×1
header-row ×1
sorting ×1
vb.net ×1
wpf ×1
wpf-controls ×1
wpfdatagrid ×1