- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在此处将 DGV 绑定(bind)到绑定(bind)源生成代码。
// dgvDocumentList
//
this.dgvDocumentList.AllowUserToAddRows = false;
this.dgvDocumentList.AllowUserToDeleteRows = false;
this.dgvDocumentList.AutoGenerateColumns = false;
this.dgvDocumentList.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dgvDocumentList.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.dMTitleDataGridViewTextBoxColumn,
this.urlCol,
this.idCol});
this.dgvDocumentList.DataSource = this.docListFetchBindingSource;
this.dgvDocumentList.Dock = System.Windows.Forms.DockStyle.Fill;
this.dgvDocumentList.Location = new System.Drawing.Point(3, 3);
this.dgvDocumentList.MultiSelect = false;
this.dgvDocumentList.Name = "dgvDocumentList";
this.dgvDocumentList.ReadOnly = true;
this.dgvDocumentList.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
this.dgvDocumentList.Size = new System.Drawing.Size(336, 493);
this.dgvDocumentList.TabIndex = 0;
this.dgvDocumentList.CellDoubleClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvDocumentList_CellContentDoubleClick);
this.dgvDocumentList.SelectionChanged += new System.EventHandler(this.dgvDocumentList_SelectionChanged);
列代码在这里。
// dCBModLinkDataGridViewTextBoxColumn
//
this.dCBModLinkDataGridViewTextBoxColumn.DataPropertyName = "DCBModLink";
this.dCBModLinkDataGridViewTextBoxColumn.HeaderText = "DCBModLink";
this.dCBModLinkDataGridViewTextBoxColumn.Name = "dCBModLinkDataGridViewTextBoxColumn";
this.dCBModLinkDataGridViewTextBoxColumn.ReadOnly = true;
this.dCBModLinkDataGridViewTextBoxColumn.Visible = false;
//
// dCBIDDataGridViewTextBoxColumn
//
this.dCBIDDataGridViewTextBoxColumn.DataPropertyName = "DCBID";
this.dCBIDDataGridViewTextBoxColumn.HeaderText = "DCBID";
this.dCBIDDataGridViewTextBoxColumn.Name = "dCBIDDataGridViewTextBoxColumn";
this.dCBIDDataGridViewTextBoxColumn.ReadOnly = true;
this.dCBIDDataGridViewTextBoxColumn.Visible = false;
//
// eQModModelNumberDataGridViewTextBoxColumn
//
this.eQModModelNumberDataGridViewTextBoxColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
this.eQModModelNumberDataGridViewTextBoxColumn.DataPropertyName = "EQModModelNumber";
this.eQModModelNumberDataGridViewTextBoxColumn.HeaderText = "Model Number";
this.eQModModelNumberDataGridViewTextBoxColumn.Name = "eQModModelNumberDataGridViewTextBoxCol
如您所见,dcbModLinkDataGridViewTextBoxColumn 的列定义为 visble = false;它还在属性表中说明了这一点。运行时它在应用程序中仍然可见。
如果我修改列表中列的位置,我会得到以下结果。除了它们在列列表中出现的顺序外没有变化。
DCBID(可见)--DCBModLink(不可见)--EQModModelNumber(可见)
DCBModLink(可见)--DCBID(不可见)--EQModModelNumber(可见)
EQModModelNumber(可见)--EQModModelNumber(不可见)--DCBID(不可见)
我通过将我想要的列留在第一个插槽中来掩盖了这个问题的症状,但我不知道为什么这个特定的 DGV 会这样。在相同的表格上还有另一个 DGV,无论列位于什么位置都可以正常工作。
我在这里看过:First Column Not Hiding in datagridview ,这里datagridview id column will not hide但他们只是像我一样将有问题的列移到了右边。
所以。我的问题是。
是否有其他我不知道的设置可以覆盖可见性参数?
有没有其他人看到这个,他们是如何阻止它的?
最佳答案
我为此使用了我自己的扩展方法..并且效果很好..此方法还以编程方式设置 dgv 客户端高度和宽度..仅使用此 ext 方法
1-)将 dgv 添加到您的表单中
2-)创建列列表和标题文本作为您想要显示给用户的内容
3-) 将方法调用为 yourDGV.showTheGivenColumns(your params, yourparams, yourparams)
附言: 我将名称更改为英文并添加英文摘要..这是代码..
/// <summary>
/// when this method called, it sets visible = false the columns where not in List of column names
/// The column names List count and header List count must be the same number
/// </summary>
/// <param name="dgvName">DGV which calls this ext method</param>
/// <param name="Method">the data source load method of the DGV which calls this ext method</param>
/// <param name="ColumnName">The columnNames List which contains the columns will show.. columnName List's type is List<string></param>
/// <param name="Header">The list where you can set the dgv's headers as you prefer..it's type is also List<string></param>
/// <returns></returns>
public static DataGridView showTheGivenColumns(this DataGridView dgvName, object dataSourceLoadMethod, List<string> columnNameList, List<string> headerList)
{
dgvName.DataSource = null;
dgvName.Columns.Clear();
dgvName.DataSource = dataSourceLoadMethod;
int j = columnNameList.Count;
int m = 0;
int s = headerList.Count;
if (j == s)
{
foreach (DataGridViewColumn d in dgvName.Columns)
{
for (int i = 0; i < j; i++)
{
if (d.Name == columnNameList[i])
{
d.HeaderText = headerList[i];
d.Visible = true;
d.Width = d.GetPreferredWidth(DataGridViewAutoSizeColumnMode.AllCells, false);
m += d.Width;
break;
}
else
{
d.Visible = false;
}
}
}
}
else
{
MessageBox.Show("Count of Header and ColumnName Lists are not equal..Please Check.");
}
///如果您的 dgv 具有垂直和/或水平滚动,则在此行之后,方法将使用此选项检查并设置大小
bool vscroll = (dgvName.DisplayedRowCount(false) < dgvName.Rows.Count);
bool hscroll = (dgvName.DisplayedColumnCount(false) < columnNameList.Count);
if (vscroll == true)
{
int vScrollWidth = (dgvName.Controls.OfType<VScrollBar>().First()).Width;
dgvName.Width = m + (vScrollWidth + 5);
}
if ( vscroll == false)
{
dgvName.Width = m + 5;
}
if (hscroll == true)
{
int hscrollWidth = (dgvName.Controls.OfType<HScrollBar>().First()).Height;
dgvName.Height = ((dgvName.RowTemplate.Height * dgvName.RowCount) + dgvName.ColumnHeadersHeight) + hscrollWidth;
}
if (hscroll == false)
{
dgvName.Height = ((dgvName.RowTemplate.Height * dgvName.RowCount) + dgvName.ColumnHeadersHeight) + 2;
}
dgvName.ClearSelection();
dgvName.ReadOnly = true;
return dgvName;
}
您可能想知道这些:
1-) 如果您的 dgv 大小似乎大于总列数,请在您的表单中设置
d.GetPreferredWidth(DataGridViewAutoSizeColumnMode.AllCells, false);
方法的 .AllCells
选项满足您的表单需求。如果您将 false
设置为 true
那么您的 dgv 将显示标记的列作为半显示..所以我们永远不需要改变这个;)
2-) 在检查滚动条代码部分的需求时,添加到宽度或高度的数字取决于屏幕分辨率。我添加的数字不是最好的,但已针对 1024*768、1280* 进行了优化800 和 1366*968 分辨率..您可能需要更改这些添加的数字..
关于c# - DataGridView 列显示虽然标记为不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10865164/
我已经看到 Datagridview 不允许复制和粘贴多个单元格的文本,是否有一个简单的设置来启用它,或者我是否必须使用键处理程序和剪贴板数据存储来包含该功能。 用户想要在一行中复制 3 个单元格,并
我有一个 DataGridView我想限制用户只为特定列下的单元格输入数值的控件。我怎样才能在 DataGridView 中完成这种类型的验证细胞? 当我创建一个简单的文本框时是可能的,但是我如何验证
我正在尝试格式化 DataGridView,使用样式颜色等。DGV 在表单启动时加载(通过 buildGrid 方法),如构造函数代码中所示: public Report1(DataSet d
第一列中的小黑三角的官方DataGridView命名法描述是什么? 好像是标记了DataGridView.CurrentRow的位置,但是只是一个get属性,我想设置一下。 Grid with arr
我有点卡在我写的一些代码上 一个大纲是我正在从 SQL 数据库中读取一些数据,并希望将其显示在表单上的 DataGridView 中。我已经确认有数据从数据库返回,但不确定为什么没有出现。我遵循了互联
我的 DataTable从数据库中提取了三列,而我只需要将其中的两列绑定(bind)到 DataGridView .你能帮我吗? 最佳答案 这可能有用 DataSet ds = new DataSet
我有一个包含 Dataset ds 和 DataGridView dgv 的 WinForms 应用程序。 dgv 绑定(bind)到 ds。 ds 通过 Task() 更新,该 Task() 使用
我有DataGridView(dgHome),在parentForm(Home)中有一些列。子 Form(bill) 有 DataGridView(dgbill) 。我需要当我单击 dgHome 中的
我有两个具有相同列架构的 DataGridView(尽管有两个不同的 DataView 作为 DataSource - 如果这很重要)。将一行从一个数据 GridView 移动到另一个数据 GridV
基本上我有 2 个 DataGridView,我需要将行从一个复制到另一个。 到目前为止我已经尝试过: DataGridViewRowCollection tmpRowCollection = Dat
我正在尝试根据它包含的行数使我的 DataGridView 的高度自动调整。目前,我能够通过以下行完成此操作: dataGridView_SearchResults.AutoSize = true;
使用 WinForms、C# .Net 2.0 我正在向非绑定(bind) DataGridView 添加行。我想在其中一列中有一个 DataGridViewButtonColumn,在单击时删除该行
我有一个 datagridview(dataGridView1,其中包含一个 dataGridview2 列标题),其中我有一个复选框列,称为 dgvCkb,在 dataGridView1。当我在任何
对不起,如果这是一个愚蠢的问题。我在这方面很陌生。我应该如何将组合框添加到数据表,然后将其加载到数据 GridView 中?这可以做到吗?这是最好的方法吗?非常感谢有关如何执行此操作的提示和教程。先感
我正在尝试将 .txt 文件导入 DataGrid。问题是虽然代码大部分工作正常,但在导入 .txt 文件时,它会创建额外的行,例如 this ; OpenFileDialog ofd
datagridview 加载速度非常慢。我该如何优化它? datagridview有4-5千行。 我必须根据几个参数动态生成一个 datagridview。(来自数据库的数据,列数) 我必须从数据库
我怎样才能强制DataGridView.CellValueChanged DataGridViewCell.Value 立即引发事件(并将更改实际提交给 ComboBox 属性)单元格中的编辑控件更改
我有一个通过数据集从数据库中获取数据的功能 public DataSet getDataSet(string query) { DataSet ds = new DataSet()
客户希望能够键入一个字母并让系统滚动 DataGridView,这样具有与字母匹配的单元格的第一行将滚动到 DataGridView 的顶部 任何建议将不胜感激 最佳答案 我不确定您将如何有效地查找与
好吧,我有一个 DataGridView,用户可以在其中单击列标题进行排序。当他们在应用排序时添加新行时,直到验证该行时才会创建记录(在退出 newRow 之前他们无法执行此操作)。排序后如何才能选择
我是一名优秀的程序员,十分优秀!