For c = 0 To grd.Columns.Count - 1
grd.Columns(c).Resizable = DataGridViewTriState.True
Next c
这允许我的DataGridView中的所有列都可以调整大小,除了最后一列.为什么?我DO得到的小调整大小鼠标指针......但你只能使列SMALLER,从来没有WIDER.
(如果我尝试使用VB.net IDE将所有列设置为Resizable,则会出现同样的问题)
我在这做错了什么?我不应该能够调整我想要的任何列,不管更大还是更小?
是否可以在单个匹配中从数据网格中删除所有列?
我知道我可以循环并逐个删除它们,或删除整个事物并创建它.
但是可以简单地清除列并将网格留在原位,以便用户可以重新开始.即把它恢复到原来的状态.
好的,这是我的代码
private void PopulateGrid()
{
UserVGrid.AutoGenerateColumns = false;
UserVGrid.Columns.Clear();
List<string> _values = populate.GetVaribles;
foreach (var line in _values)
{
if (!line.Contains("Startind"))
{
string[] newline = line.Split('=');
DataGridViewColumn newColumn = new DataGridViewTextBoxColumn();
newColumn.Name = newline[0];
newColumn.HeaderText = newline[1];
newColumn.ToolTipText = newline[2];
UserVGrid.Columns.Add(newColumn);
}
}
Run Code Online (Sandbox Code Playgroud)
所以我们假设_values有apple,pear作为值
运行此方法一次,我得到一个数据网格,其中包含两个名为apple和pear的列.
这次运行它第二次使用_values包含char,table.
我最终得到了4支苹果,梨,椅子和桌子.我想要的是它第二次运行它清除网格然后应用新的colums.
干杯
亚伦
如何在DataGridView中的特定DataGridViewTextBoxColumn列上执行验证,以便用户需要在其中输入值?
是否可以在单个DataGridViewColumn中同时包含DataGridViewComboBoxCells和DataGridViewTextBoxCells?或者我绝对限制每列有一种类型?
我的UI由一个AutoCreateColumns= false绑定到业务对象列表的datagridview()组成.让我们假设我的对象包含2列 - 价格和数量 - 我想在我的网格中添加一个新列 - 总计 - 将计算哪个值 - 价格*数量,但不修改我的业务对象.
可能吗?
我有一个小问题。我需要保存排序(按列和升序或降序)并在程序下次启动时加载它。获取当前选定的列没有问题我通过以下方式执行此操作
private int GetSortColumn()
{
DataGridViewColumn sortColumn = this.dataGridView.SortedColumn;
if (sortColumn != null)
{
Properties.Settings.Default.sortingColumnSortMode = dataGridView.SortOrder;
return sortColumn.Index;
}
else
//error
return -1;
}
Run Code Online (Sandbox Code Playgroud)
并将数据保存在我的设置中。设置这个属性也没有问题:
private void SetSortColumn(int indexOfColumn)
{
if (indexOfColumn != null && indexOfColumn != -1)
{
this.dataGridView.Sort(this.dataGridView.Columns[indexOfColumn], ListSortDirection.Descending);
}
}
Run Code Online (Sandbox Code Playgroud)
但我还需要保存并设置升序或降序属性。我该怎么做呢?有没有办法使用 dataGridView.SortedColumn 获取 ListSortDirection?或者如果dataGridView按升序或降序排序,是否有更好的解决方案?
谢谢和问候!礼金
有没有人知道在调整 datagridview 行和列大小时禁用出现的行的方法。这条线经常闪烁,所以我宁愿自己画一条实线并禁用默认的实线。
我希望通过绘制自己的粗线(我已经完成),它会绘制在默认闪烁的顶部,但不幸的是,两条线都出现了,闪烁的线通常出现在我的实线的右侧或左侧. 我不认为它是相关的,但是用于绘制下面的线的代码。
Private Sub DataGridView1_Paint(sender As Object, e As PaintEventArgs) Handles DataGridView1.Paint
If resizingColumns = True Then
Dim penRed As Pen
penRed = New Pen(color.Red, 3)
Dim cursorPosition As Integer = Me.DataGridView1.PointToClient(New Point(Cursor.Position.X, Cursor.Position.Y)).X
e.Graphics.DrawLine(penRed, cursorPosition, 0, cursorPosition, Me.DataGridView1.Size.Height)
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
我能想到的唯一另一种选择(我真的不想这样做)是将 AllowUserToResizeColumns 设置为 false(这也会隐藏列大小调整线),然后使用鼠标事件以编程方式调整列大小。
任何帮助或指导将不胜感激。
如何设置RightToLeftDataGridViewColumn 中特定 DataGridViewCell 的属性?
为什么我没有找到MyEntity和FullName列的列名称的异常?虽然我看到列名在UI中显示.
InitializeComponent();
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
foreach (DataGridViewRow row in dataGridView1.SelectedRows)
{
int rowIndex = dataGridView1.Rows.IndexOf(row);
myObject = dataGridView1.Rows[rowIndex].Cells["MyEntity"].Value as IEntityObject;
fileName = dataGridView1.Rows[rowIndex].Cells["FullName"].Value.ToString();
}
Run Code Online (Sandbox Code Playgroud) 我在屏蔽密码列时遇到问题。下面的代码有效,但它不按我想要的方式工作。在编辑它时会屏蔽密码,但是当我完成并继续下一个 datagridviewcell 密码时,密码变得可见。
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if ( dataGridView1.CurrentCell.ColumnIndex == 5 || dataGridView1.CurrentCell.ColumnIndex == 10)//select target column
{
TextBox textBox = e.Control as TextBox;
if (textBox != null)
{
textBox.UseSystemPasswordChar = true;
}
}
var txtBox = e.Control as TextBox;
txtBox.KeyDown -= new KeyEventHandler(underlyingTextBox_KeyDown);
txtBox.KeyDown += new KeyEventHandler(underlyingTextBox_KeyDown);
}
Run Code Online (Sandbox Code Playgroud)
同样在编辑模式下,它应该只屏蔽索引为 5 && 10 的列,但是它屏蔽了所有列。我无法解决这些问题,任何帮助都会很棒。