我编辑了 datagridview1 的列,可是加载数据时,datagridview1 却自动添加了列,我编辑的列却是空的,请问怎么加载到自己的列上去啊。

worte 2014-05-24 03:33:36
我编辑了datagridview1的列,可是加载数据时,datagridview1却自动添加了列,我编辑的列却是空的,请问怎么加载到自己的列上去啊。

datagridview1里面有包含datagridviewcombobox和datagridviewbutton的例.
还有数据怎么再保存进去数据库?

就是要实现:把数据加载到特定格式的datagridview里,修改完后再保存进数据库.

新手学习(VB)中,先谢谢了

...全文
450 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
X-i-n 2014-06-05
  • 打赏
  • 举报
回复
错误提示具体内容是什么
X-i-n 2014-06-05
  • 打赏
  • 举报
回复
DataGridViewComboboxColumn列有没有把item集合填充完毕?combo列必须涵盖所有可能出现的值(红橙黄绿青蓝紫)。这个操作直接在属性编辑里操作就行。
X-i-n 2014-06-05
  • 打赏
  • 举报
回复
不用在代码里添加列……直接在datagridview控件的属性编辑窗口里编辑就行,添加完combo列的时候,直接把combo列的取值范围一块编辑好 直接在datagridview控件的属性编辑窗口里编辑就行 直接在datagridview控件的属性编辑窗口里编辑就行 直接在datagridview控件的属性编辑窗口里编辑就行
worte 2014-06-05
  • 打赏
  • 举报
回复
引用 14 楼 Runnerchin 的回复:
错误提示具体内容是什么

1.添加textbox列时没问题:

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
DataGridView1.AutoGenerateColumns = False
Dim dt As New DataTable
dt.Columns.Add("a")
dt.Columns.Add("b")
dt.Rows.Add("1", "12")
dt.Rows.Add("2", "22")

DataGridView1.Columns.Add(New DataGridViewTextBoxColumn)
DataGridView1.Columns.Add(New DataGridViewTextBoxColumn)

'Dim Cbo1 As New DataGridViewComboBoxColumn
'Cbo1.Items.AddRange("1", "2", "3", "4")
'DataGridView1.Columns.Add(Cbo1)
'Dim Cbo2 As New DataGridViewComboBoxColumn
'Cbo2.Items.AddRange("12", "22", "32", "42")
'DataGridView1.Columns.Add(Cbo2)

DataGridView1.DataSource = dt
DataGridView1.Columns(0).DataPropertyName = "a"
DataGridView1.Columns(1).DataPropertyName = "b"

End Sub
End Class



2.添加Combobox列时出错:


Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
DataGridView1.AutoGenerateColumns = False
Dim dt As New DataTable
dt.Columns.Add("a")
dt.Columns.Add("b")
dt.Rows.Add("1", "12")
dt.Rows.Add("2", "22")

'DataGridView1.Columns.Add(New DataGridViewTextBoxColumn)
'DataGridView1.Columns.Add(New DataGridViewTextBoxColumn)

Dim Cbo1 As New DataGridViewComboBoxColumn
Cbo1.Items.AddRange("1", "2", "3", "4")
DataGridView1.Columns.Add(Cbo1)
Dim Cbo2 As New DataGridViewComboBoxColumn
Cbo2.Items.AddRange("12", "22", "32", "42")
DataGridView1.Columns.Add(Cbo2)

DataGridView1.DataSource = dt
DataGridView1.Columns(0).DataPropertyName = "a"
DataGridView1.Columns(1).DataPropertyName = "b"

End Sub
End Class



不好意思,又可以了,我也不清楚哪里出问题了,
已经全部写出来就把这些也上传吧,
再次谢谢了
worte 2014-06-04
  • 打赏
  • 举报
回复
引用 11 楼 Runnerchin 的回复:
如果要用上面的代码,先在datagridview中把你所有列全手工添加出来 [quote=引用 10 楼 worte 的回复:] [quote=引用 9 楼 Runnerchin 的回复:] 查了一下,用下面的代码也可以实现
        DataGridView1.AutoGenerateColumns = False
        Dim dt As New DataTable
        dt.Columns.Add("a")
        dt.Columns.Add("b")
        dt.Rows.Add("1", "12")
        dt.Rows.Add("2", "22")
        DataGridView1.DataSource = dt
        DataGridView1.Columns(0).DataPropertyName = "a"
        DataGridView1.Columns(1).DataPropertyName = "b"
数据量大的话分页显示. 更改数据后上传方法挺多,可以在编辑前记录下值,结束编辑后比对一下当前值和之前记录的值,如果不一样,则更新 也可以直接写在cellvaluechanged里。
我测试了下,上面的代码在中间还要加个定义增加Datagridview1列的语句,但要是增加DataGridViewComboboxColumn列也还是出错[/quote][/quote] 谢了,手工添加也不了,问题成了:在DataGridView的DataGridViewComboboxColumn列里用到.DataPropertyName属性就会出错?
worte 2014-05-31
  • 打赏
  • 举报
回复
还有个问题:能不能顺便告诉我要把更改后的数据更新到数据库的代码要怎么写,先谢了 新手,还不太懂得一些东西,
worte 2014-05-31
  • 打赏
  • 举报
回复
谢谢了,是下面这样写吧:

            For x = 0 To DataGridView1.Rows.Count - 1
                DataGridView1.Rows(x).Cells("CName").Value =Trim( DataGridView1.Rows(x).Cells("CategoryName").Value)
            Next
            DataGridView1.Columns("CategoryName").Visible = False
这样真的是可以, 但有个问题:如果遇到数据量很大的话那不是速度会很慢?
X-i-n 2014-05-31
  • 打赏
  • 举报
回复
如果要用上面的代码,先在datagridview中把你所有列全手工添加出来
引用 10 楼 worte 的回复:
[quote=引用 9 楼 Runnerchin 的回复:] 查了一下,用下面的代码也可以实现
        DataGridView1.AutoGenerateColumns = False
        Dim dt As New DataTable
        dt.Columns.Add("a")
        dt.Columns.Add("b")
        dt.Rows.Add("1", "12")
        dt.Rows.Add("2", "22")
        DataGridView1.DataSource = dt
        DataGridView1.Columns(0).DataPropertyName = "a"
        DataGridView1.Columns(1).DataPropertyName = "b"
数据量大的话分页显示. 更改数据后上传方法挺多,可以在编辑前记录下值,结束编辑后比对一下当前值和之前记录的值,如果不一样,则更新 也可以直接写在cellvaluechanged里。
我测试了下,上面的代码在中间还要加个定义增加Datagridview1列的语句,但要是增加DataGridViewComboboxColumn列也还是出错[/quote]
worte 2014-05-31
  • 打赏
  • 举报
回复
引用 9 楼 Runnerchin 的回复:
查了一下,用下面的代码也可以实现
        DataGridView1.AutoGenerateColumns = False
        Dim dt As New DataTable
        dt.Columns.Add("a")
        dt.Columns.Add("b")
        dt.Rows.Add("1", "12")
        dt.Rows.Add("2", "22")
        DataGridView1.DataSource = dt
        DataGridView1.Columns(0).DataPropertyName = "a"
        DataGridView1.Columns(1).DataPropertyName = "b"
数据量大的话分页显示. 更改数据后上传方法挺多,可以在编辑前记录下值,结束编辑后比对一下当前值和之前记录的值,如果不一样,则更新 也可以直接写在cellvaluechanged里。
我测试了下,上面的代码在中间还要加个定义增加Datagridview1列的语句,但要是增加DataGridViewComboboxColumn列也还是出错
X-i-n 2014-05-31
  • 打赏
  • 举报
回复
查了一下,用下面的代码也可以实现
        DataGridView1.AutoGenerateColumns = False
        Dim dt As New DataTable
        dt.Columns.Add("a")
        dt.Columns.Add("b")
        dt.Rows.Add("1", "12")
        dt.Rows.Add("2", "22")
        DataGridView1.DataSource = dt
        DataGridView1.Columns(0).DataPropertyName = "a"
        DataGridView1.Columns(1).DataPropertyName = "b"
数据量大的话分页显示. 更改数据后上传方法挺多,可以在编辑前记录下值,结束编辑后比对一下当前值和之前记录的值,如果不一样,则更新 也可以直接写在cellvaluechanged里。
KaiberMan 2014-05-31
  • 打赏
  • 举报
回复
急需这个东西啊,到处找写到数据库里的方法,发现都似乎C#的,,是不是该学这个呢?
X-i-n 2014-05-30
  • 打赏
  • 举报
回复
换个思路 隐藏掉查询结果中的CategoryName列,新建一个combo列代替(把替代列和原始列的列名设置成不一样,方便区分) 具体实现可以按如下步骤做: 直接在datagridview的属性窗口中新建一个combo列,并填充好item 查询,绑定,设置查询结果中的CategoryName列(为什么开头要设置不一样的列名)visible属性=false 调整替代列的位置,到第二列 遍历datagridview每行,把隐藏列的值赋给显示列
worte 2014-05-29
  • 打赏
  • 举报
回复
楼上的,谢谢了
但我要的不是只显示数据库中的数据。我是要显示了,再修改(使用datagridviewcomboboxcolumn修改)如下图


上图是我用combobox 做的,但列或列变动后,位置定不好

修改了,最后再保存在数据库里
worte 2014-05-29
  • 打赏
  • 举报
回复
我用添加Datagridviewcomboboxcolumn列的代码如下:
 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Try
mycon.ConnectionString = "Server=.;Database=abcd;User ID=sa;Password=1234"
sqltxt = "select * from Products"
If mycon.State = ConnectionState.Closed Then mycon.Open()
mycmd = New SqlClient.SqlCommand(sqltxt, mycon)
myda = New SqlClient.SqlDataAdapter(mycmd)
myda.Fill(ds, "Categories")
mytab = ds.Tables("Categories")
DataGridView1.DataSource = mytab
Dim abc() As String = {"红", "橙", "黄", "绿", "青", "蓝", "紫"}
Dim List As New DataGridViewComboBoxColumn()
List.Items.AddRange(abc)
List.DisplayIndex = 1
List.HeaderText = "CategoryName"
DataGridView1.Columns.Add(List)
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub

效果如下:
第二列及第三列没办法合在一起
要怎么写才能合在一起呢?
wind_cloud2011 2014-05-25
  • 打赏
  • 举报
回复
http://blog.csdn.net/mazhaojuan/article/details/7173934

16,549

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧