如何设置datagridview列为combobox
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何设置datagridview列为combobox相关的知识,希望对你有一定的参考价值。
datagridview已经绑定数据源
Visual Basic code?
1
2
3
4
SqlStr = "select * from [fa]"
db.rs.Open(SqlStr, db.conn, 1, 2)
db.da.Fill(db.ds, db.rs, "fa")
datagridview1.DataSource = db.ds.Tables(0)
然后想第三列“名称”设置成combobox,读取另外一个表的第一列信息填充combobox下拉列表框
我模板里绑定数据源之后做以下操作的结果正确,代码绑定数据源就不会写了
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'TODO: 这行代码将数据加载到表“DbDataSet1.fa”中。您可以根据需要移动或删除它。
db.conn.Open(db.ConnStr)
Me.FaTableAdapter.Fill(Me.DbDataSet1.fa)
SqlStr = "select * from [prize]"
db.rs.Open(SqlStr, db.conn, 1, 2)
db.da.Fill(db.ds, db.rs, "prize")
c2.ValueMember = "名称"
c2.DisplayMember = "名称"
c2.DataSource = db.ds.Tables(0)
End Sub
我是新手,请大神指教,多谢
With Me.DataGridView1
.Columns.Add(New DataGridViewComboBoxColumn)
End With
或者设计时在datagridview上右键添加列,然后指定列名,并指定类型为DataGridViewComboBoxColumn追问
可我想代码绑定DataGridView1的数据源
这样的话就会在添加的combobox列后面重新生成了“fa”这个表里的所有列“名称”这一列就重复了
我想全部用代码实现绑定数据源为“fa”表,其中“名称”这一列为combobox,下拉列表框里的内容为另一个奖品表里的记录,form1_load的时候“名称”这列先显示“fa.名称”的值,用户再通过下拉列表框可添加或修改这个“fa”表内的记录
DataTable dt = new DataTable();
dt.Columns.Add("Id", typeof(string));
dt.Columns.Add("Name", typeof(string));
dt.Rows.Add("001", "一班");
dt.Rows.Add("002", "二班");
DataGridViewComboBoxColumn c = new DataGridViewComboBoxColumn();
c.DataSource = dt;
c.DisplayMember = "Name";
c.ValueMember = "Id";
c.DataPropertyName = "banj";
dataGridView1.Columns.Add(c);
显示正常。
DataGridView - 如何设置列宽?
【中文标题】DataGridView - 如何设置列宽?【英文标题】:DataGridView - how to set column width? 【发布时间】:2011-01-10 09:09:53 【问题描述】:我有一个带有DataGridView
控件的 WinForms 应用程序。我的控件有五个
列(比如“姓名”、“地址”、“电话”等)
我对默认列宽不满意。我想更好地控制列的外观。我想要的是 是能够做到以下之一:
以百分比设置每列的宽度 以像素为单位设置每列的宽度 使用其他一些最实用的方法(使宽度适合文本等)请建议 - 使用哪个属性以及如何使用。
【问题讨论】:
【参考方案1】:您可以使用 DataGridViewColumn.Width 属性来做到这一点:
DataGridViewColumn column = dataGridView.Columns[0];
column.Width = 60;
http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcolumn.width.aspx
【讨论】:
谢谢!我才意识到为什么它对我不起作用。 MSDN说如果设置这个属性时指定的值小于MinimumWidth属性的值,就改用MinimumWidth属性值。 是的,Grid控件不能直接使用宽度,所以你使用ItemStyle.With来设置它的属性。 要添加到此,如果在 Visual Studio 中工作,请右键单击,单击编辑列,然后向下滚动。该属性(即 column.width)将存在。【参考方案2】:以下也可以尝试:
DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells
或使用DataGridViewAutoSizeColumnsMode枚举中的其他设置选项
【讨论】:
这是最好的答案。然后你可以调整表单的大小以适应 DataGridView 的宽度。谢谢马克!这为我省去了很多麻烦。 当使用“填充”选项时,列会展开以填充网格的整个宽度。 这真的比选择的答案更有用!【参考方案3】:上述大多数解决方案都假定父 DateGridView
的 .AutoSizeMode
不等于 Fill
。如果您将网格的.AutoSizeMode
设置为Fill
,则需要将每个column 的AutoSizeMode 设置为None
,如果您想修复特定的列宽(并让其他列填写)。如果您更改列宽并且 .AutoSizeMode
不是 None
首先,我发现一个关于空对象的奇怪 MS 异常。
这行得通
chart.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
... add some columns here
chart.Column[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
chart.Column[i].Width = 60;
这会引发有关设置边框厚度的某些内部对象的空异常。
chart.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
... add some columns here
// chart.Column[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
chart.Column[i].Width = 60;
【讨论】:
这帮助我从调试到几个小时..!! 很好的建议,虽然真的很奇怪... :~【参考方案4】:我知道这是一个老问题,但没有人回答过第一部分,以百分比设置宽度。这可以通过FillWeight (MSDN) 轻松完成。以防其他人在搜索时遇到此答案。
您可以在设计器中设置 DataGridAutoSizeColumnMode 为 Fill。默认情况下,每列的 FillWeight 为 100。然后在后面的代码中,在 FormLoad 事件上或将数据绑定到网格之后,您可以简单地:
gridName.Columns[0].FillWeight = 200;
gridName.Columns[1].FillWeight = 50;
等等,无论你想要什么比例的重量。如果你想用加起来为 100 的数字来处理每一列,对于文字百分比宽度,你也可以这样做。
它提供了一个很好的完整 DataGrid,其中标题使用整个空间,即使用户调整了窗口大小。在宽屏上看起来不错,4:3 等等。
【讨论】:
【参考方案5】:关于你最后的子弹
使宽度适合文本
您可以试验 DataGridViewColumn 的 .AutoSizeMode,将其设置为以下值之一:
None
AllCells
AllCellsExceptHeader
DisplayedCells
DisplayedCellsExceptHeader
ColumnHeader
Fill
MSDN 页面上的更多信息
【讨论】:
【参考方案6】:我建议像这样为所有网格的列指定宽度:
DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();
col.HeaderText = "phone"
col.Width = 120;
col.DataPropertyName = (if you use a datasource)
thegrid.Columns.Add(col);
对于主要(或最长)列(比如说地址),这样做:
col = new DataGridViewTextBoxColumn();
col.HeaderText = "address";
col.Width = 120;
棘手的部分
col.MinimumWidth = 120;
col.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
棘手的部分
col.DataPropertyName = (same as above)
thegrid.Columns.Add(col);
这样,如果您拉伸表单(并且网格在他的容器中“填充”)主列,在这种情况下为地址列,将占用所有可用空间,但它永远不会小于 col。最小宽度,所以它是唯一调整大小的。
我使用它,当我有一个网格并且它的最后一列用于显示图像(如图标详细信息或图标删除..)并且它没有标题并且它必须始终是最小的一个时。
【讨论】:
【参考方案7】:public static void ArrangeGrid(DataGridView Grid)
int twidth=0;
if (Grid.Rows.Count > 0)
twidth = (Grid.Width * Grid.Columns.Count) / 100;
for (int i = 0; i < Grid.Columns.Count; i++)
Grid.Columns[i].Width = twidth;
【讨论】:
【参考方案8】:用途:
yourdataView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
【讨论】:
【参考方案9】:DataGridView1.Columns.Item("Adress").Width = 60
DataGridView1.Columns.Item("Phone").Width = 30
DataGridView1.Columns.Item("Name").Width = 40
DataGridView1.Columns.Item("Etc.").Width = 30
【讨论】:
这在 VB.net WinForms 中非常有效。 5年后它帮助了我。谢谢。【参考方案10】:如果您不想以编程方式执行此操作,您可以操作位于 Columns 属性内的 Column width 属性。打开列编辑属性后,您可以选择要编辑的列,向下滚动到布局绑定列属性的部分并更改宽度。
【讨论】:
【参考方案11】:您可以通过一个循环为所有列和行设置默认宽度和高度,如下所示。
// DataGridView Name= dgvMachineStatus
foreach (DataGridViewColumn column in dgvMachineStatus.Columns)
column.Width = 155;
foreach (DataGridViewRow row in dgvMachineStatus.Rows)
row.Height = 45;
【讨论】:
【参考方案12】:使用 Columns 属性并将 Auto Size Mode 设置为 All Cells,Resizable 设置为 True,Frozen 设置为 False,并将其设置为 True。
该列将根据插入的数据自动调整大小。
【讨论】:
【参考方案13】:简单
dataGridView1.Columns[0].FillWeight = 20;
【讨论】:
【参考方案14】:或者您可以直接转到表单,然后在调用要显示的数据时设置属性
喜欢
datagridview1.columns(0).width = 150
datagridview1.columns(1).width = 150
datagridview1.columns(2).width = 150enter code here
这么简单,对我来说效果很好,兄弟
【讨论】:
以上是关于如何设置datagridview列为combobox的主要内容,如果未能解决你的问题,请参考以下文章