可能重复:
单击一次打开下拉列表(在数据网格视图中)
我们有一个DataGridView,其中一列是具有DropDownButton样式的ComboBox.DataGridView处于FullRowSelect模式.假设我有5行,并在DataGridView中选择了行0.
我想从-say的ComboBox中选择一个项目例如第2行,因此我单击ComboBox的小箭头.当我这样做时,首先,选择DataGridView的第2行.ComboBox尚未打开.只有第二次单击才能打开ComboBox.
事实上,它过去需要3次点击,但后来我们重载了CellMouseDown来做:
myDataGridView.ClearSelection();
myDataGridView.Rows[e.RowIndex].Selected = true;
Run Code Online (Sandbox Code Playgroud)
有了这个,我们只有2次点击.有没有办法只显示一次单击显示ComboBox项目?
编辑:我还应该提一下,如果我单击ComboBox本身,而不是单击ComboBox的小箭头,只需3次单击即可显示ComboBox项目!
datagridview datagridviewcolumn datagridviewcombobox datagridviewcomboboxcell
我在C#项目中为DataGridView设置以下属性...
sampleDataGridView.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
sampleDataGridView.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
Run Code Online (Sandbox Code Playgroud)
但我注意到标题的(即标题单元格中的文本由于某种原因略微向左偏移..数据行完全对齐在中心虽然...
是什么导致这个?
我在Winform中遇到与datagridview相关的问题.
我的左侧面板中有一个表名列表.当我点击表格I时,在右侧面板中显示表格内容.我通过获取数据并将数据源分配给dgv来显示datagridview中的数据.
我正在设置以下属性为dgv.
dgTemp.Dock = DockStyle.Fill;
dgTemp.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
dgTemp.AutoSize = true;
dgTemp.DefaultCellStyle.WrapMode = DataGridViewTriState.True;
dgTemp.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
dgTemp.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
dgTemp.ReadOnly = true;
dgTemp.AutoGenerateColumns = true;
dgTemp.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dgTemp.AllowUserToAddRows = false;
Run Code Online (Sandbox Code Playgroud)
我的问题是我分配给dgv的数据源中可以有任意数量的列.因此,如果列数很少(例如1或2),则dgv大小非常小,右侧的空白区域看起来非常难看.我不能使用auto autosizecolumnmode来,fill因为当有更多的列时,所有列都会缩小并且扩展列不会给我滚动到底部
所以我的要求是
有什么事件或属性我可以使用?
谢谢你的期待.
我希望用户能够在DataGridView(dgv)的列中搜索数字.dgv可以保存很多记录.每条记录都有一个项目编号.所以我希望用户能够在项目编号列中搜索项目编号.我的列是:ProjectID(不可见); 图像(无headertext); 项目编号; 项目名; 公司; 联系.
这是我的代码:
private void btnSearch_Click(object sender, EventArgs e)
{
string searchValue = textBox1.Text;
int rowIndex = -1;
dgvProjects.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
try
{
foreach (DataGridViewRow row in dgvProjects.Rows)
{
if (row.Cells[row.Index].Value.ToString().Equals(searchValue))
{
rowIndex = row.Index;
dgvProjects.Rows[row.Index].Selected = true;
break;
}
}
}
catch (Exception exc)
{
MessageBox.Show(exc.Message);
}
}
Run Code Online (Sandbox Code Playgroud)
问题#1:到目前为止它做了什么:用户在TextBox1中键入项目编号.当他/她单击按钮时,代码会在行中搜索此字符串,当找到项目编号时,该行将被选中.它工作正常,但只有一次.当我想搜索其他项目编号时,没有任何反应.
问题2:我认为这可以通过仅搜索列项目名称的值以更好的方式完成.但是我该如何正确地做到这一点?
我用来搜索的代码来自这个答案
我有这个问题,我创建了自己的datagridviewcolumn,我希望添加一些你可以在设计时编辑中更改的属性...这是我的代码:
private int nMaxLength;
[Description("Fondoscala valore"), Category("Sea")]
public int MaxLength
{
get { return nMaxLength; }
set { nMaxLength = value; }
}
Run Code Online (Sandbox Code Playgroud)
实际上没问题,当你打开列编辑器时,你会在Sea类别下看到这个属性,你可以改变,但是当你改变它时,如果你去.Designer.cs文件,你会看到MaxLength值为0 ..没有变化......有什么问题?提前致谢
我为DataGridView创建了一个自定义列,原因是我想在列中添加属性(类型).我右键单击DataGridView并选择"编辑列...".然后,当我选择我自定义列类型的列时,我可以编辑属性,但是如果我在编辑后单击"确定",然后再次转到"编辑列...",我分配给我的属性的值离开了.
这是我的代码:
public class CustomColumn : DataGridViewColumn
{
[DisplayName("Type")]
[Category("Custom Property")]
public String type { get; set; }
public CustomColumn()
: base(new DataGridViewTextBoxCell())
{
}
}
Run Code Online (Sandbox Code Playgroud)
和属性窗口的图像:
属性窗口的图像http://s8.postimage.org/fzrke75gl/Capture.png
有人可以告诉我我做错了什么,或者我需要添加什么,这样当我更改属性窗口中的值时,该值是否已分配给属性?
我想检测特定列的单元格值已更改。
我的Datagridview名称是DGV_Products6列。
Product ID | Descriptions | Quantity | Unit Price | Discount | Amount
G 01 | Gallon #01 | 2 | 1850 | 100 | 3600
G 02 | Gallon #02 | 1 | 1850 | 50 | 1800
Run Code Online (Sandbox Code Playgroud)
我只想在Quantity column单元格值更改时触发一些代码,而在值更改时不触发discount column。我该如何完成任务?目前的代码,我尝试过的是;
Private Sub DGV_Products_CellValueChanged(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DGV_Products.CellValueChanged
If DGV_Products.Rows.Count > 0 Then
Dim Quantity As Integer = CInt(DGV_Products.CurrentRow.Cells(2).Value)
Dim UnitProce As Integer = CInt(DGV_Products.CurrentRow.Cells(3).Value)
Dim DiscountPrice As …Run Code Online (Sandbox Code Playgroud) 我有一个看似简单的问题,我已经动态创建了一个DataTable,并且我很好地添加了行.但是我有一个列,它将有一个标志,这是一个图像.我已经将两个标志(.png图像)导入到项目资源中.但是我无法将列的DataType设置为System.Type.Bitmap,因为DataColumn不支持,因为这里可以看到.我见过一个解决方案,说我将DataType设置如下
dataColumn = new DataColumn("Flag");
dataColumn.DataType = System.Type.GetType("System.Byte[]"); //Replacing System.Byte[] with System.Type.Bitmap throws Type Exception
dataTable.Columns.Add(dataColumn);
Run Code Online (Sandbox Code Playgroud)
然而,抛出一个Exception声明编译器期望Byte []但得到了Bitmap.
以下是我向DataTable添加行的方法
row["Part Number"] = part;
row["Module Name"] = populator.LookUpAValue(moduleSql);
row["Flag"] = Properties.Resources.Yellow_Flag;
row["Location"] = populator.LookUpAValue(nameSql);
dataTable.Rows.Add(row);
Run Code Online (Sandbox Code Playgroud)
这是我的问题,我将DataType保存为图像列,因此当我显示到DataGridView时,我看到显示的图像.如果不在DataGridView上设置DataType而不是显示图像,我会得到文本
System.Drawing.Bitmap
我创建了一个带有 DataGridView 的 Windows 窗体,并添加了一列,其中每行包含一个复选框。将 DataTable 绑定到 DataGridView,然后添加 DataGridViewCheckBoxColumn。
当我的表单关闭时,我尝试获取每行中复选框的值,但如果用户在任何时候都没有选中一行中的复选框,那么当我认为应该返回 false 时,程序只会将其值返回为 null (未检查)。这是为什么?我可以做什么来解决它?
//add checkbox column
DataGridViewCheckBoxColumn mCheckboxColumn = new DataGridViewCheckBoxColumn();
mCheckboxColumn.Name = "chk";
mCheckboxColumn.HeaderText = "checkbox";
dgv.Columns.Add(mCheckboxColumn);
//looping through each row
foreach (DataGridViewRow row in dgv.Rows)
{
if ((bool)row.Cells["chk"].Value == true)
{
MessageBox.Show("checked!");
}
}
Run Code Online (Sandbox Code Playgroud) c# datagridview datagridviewcheckboxcell datagridviewcolumn winforms
datagridview ×9
c# ×6
winforms ×4
c#-4.0 ×1
datacolumn ×1
datatable ×1
properties ×1
vb.net ×1