注册 登录
编程论坛 VB.NET论坛

求助!datagridview checkbox 值的变换问题

yangmz 发布于 2021-06-10 11:42, 1174 次点击
本人初学VB2010+sqlite3,现遇到一个问题,请教高手一下
我在窗体中加入一个datagridview控件,设置一列为 DataGridViewCheckBoxColumn 类型,数据库sqlite3中的一个boolean字段,0表示假,1表示真。同时,该数据调入dataset中,设置该列的数据源为该字段。
datagridview控件中该列的falseValue=0,Truevalue=1,indeterminatevalue=0,Threestate=false
程序调试时,能正常显示数据,数据为0时,checkbox为空白,数据为1时,checkbox为勾选状态
但用鼠标点击任一行的checkbox,并改变其值时,却出现下图问题:

只有本站会员才能查看附件,请 登录



百度了一下,说是值没有变换,由于sqlite3数据库是以0和1来表示false和true,所以出错。所以请教高手一下,如何变换?在哪个事件中变换(有具体代码更好)?一会是0,1  一会是true,fase,对于一个初学者来说头很晕啊
代码如下:
    dim salda_sxu_mb As New SQLite.SQLiteDataAdapter         '模板中的手续
    dim  SQLconn_mb As New Data.SQLite.SQLiteConnection          '定义系统模板数据库链接对象
    dim sqlcmd As New SQLite.SQLiteCommand                       '定义命令操作
    dim ds As New DataSet()                                       '作为数据集  
 
     SQLconn_mb.ConnectionString = "data source=" & AppStartDir & "\data\xmnodemould.db" '链接数据库
     sqlcmd.Connection = SQLconn_mb
     salda_sxu_mb = New SQLite.SQLiteDataAdapter("select * from sxu", SQLconn_mb)
     salda_sxu_mb.Fill(ds, "sxu_mb")

  Dim addallsxu As SxuModal                                    'SxuModal为显示datagridview的窗体
        addallsxu = New SxuModal
        With addallsxu.DataGridView1
            .AutoGenerateColumns = False
            .Columns(0).Width = 500
            .Columns(1).Width = 155
            .Columns(2).Width = 70
            .ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
            .RowHeadersVisible = True
            .RowHeadersWidth = 15
            .Columns("Column1").DataPropertyName = ds.Tables("sxu_mb").Columns(0).ToString
            .Columns("Column2").DataPropertyName = ds.Tables("sxu_mb").Columns(1).ToString
            .Columns("Column3").DataPropertyName = ds.Tables("sxu_mb").Columns(2).ToString               ’该列为boolean类型
            .DataSource = ds.Tables("sxu_mb")
      end with

      addallsxu.ShowDialog()

   


[此贴子已经被作者于2021-6-10 11:46编辑过]

1 回复
#2
yangmz2021-06-12 10:48
经不断在网上搜索前人的经验和实践,  已解决
Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
        Dim cell As DataGridViewCheckBoxCell = DataGridView1.Rows(e.RowIndex).Cells("Column3")
        Dim checked As Boolean = cell.EditingCellFormattedValue
        If checked Then
            cell.Value = System.Boolean.TryParse(1, Boolean.TrueString)
        Else
            cell.Value = System.Boolean.TryParse(0, Boolean.FalseString)
        End If
        DataGridView1.RefreshEdit()       '主要是这句没有加上,才会出错误。

    End Sub
1