1

データベースのブール列から DataGridView チェックボックス列を正しく設定できません。

最初の form_load コード:

Me.DataGridView1.DataSource = Me.bindingSource1
GetData("SELECT myInt, myBool, myString " & _
        "FROM " & myFavTable & " " & _
        "WHERE (myInt > 100) ORDER BY myString")

formatGrid()

GetData で、myTable にデータを入力します。

Me.dataAdapter.Fill(myTable)
Me.bindingSource1.DataSource = myTable

最後に、表示する前にグリッドをフォーマットします。

自動フォーマットよりもロードがはるかに高速であるため、手動でフォーマットします。

    With DataGridView1
        .AllowUserToAddRows = False
        .AllowDrop = False
        .AllowUserToOrderColumns = False
        .AllowUserToResizeRows = False
        .SelectionMode = DataGridViewSelectionMode.FullRowSelect
        .MultiSelect = False
        .Dock = DockStyle.Fill
        .EditMode = DataGridViewEditMode.EditProgrammatically

       With .Columns(0)
            .Name = "postN"
            .HeaderText = "Postal"
            .Width = 55
        End With

        With .Columns(1) 'here should be a checkbox
            .Width = 20
        End With

        With .Columns(2)
            .Name = "colCity"
            .HeaderText = "City"
            .Width = 180
        End With
    End With

しかし、このコードでは、チェックボックスを表示する必要がある私の列には0、データベースにあるときに文字列値が表示されますFALSE

この状況で、テキストの代わりに中央の列にチェックボックスを表示するにはどうすればよいですか?

バインディングの前後に .Columns.Add... を試してみましたが、望ましい結果は得られませんでした。
そうすれば取得できますcheckboxesが、新しい列にあります。

4

3 に答える 3

2

設計時に、列をDataGridViewに追加し、中央の列をCheckBoxColumnとして設定します。

次に設定します:

With DataGridView1
   .AutoGenerateColumns = False

編集: 私は今問題を見ています。DataPropertyNameを列と同じになるように設定する必要があります。

DataGridViewに列を追加する場合、そのダイアログで、DataTable(myTable)の列名と一致するようにDataPropertyNameを設定します。それがマッピングの背後にある魔法です。

ここに画像の説明を入力してください

コードは次のとおりです。

DataTable dt = new DataTable();
dt.Columns.Add("TextBoxCol");
dt.Columns.Add("CheckBoxCol");
DataRow dr = dt.NewRow();
dr[0] = "Hello";
dr[1] = false;
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = "World";
dr[1] = true;
dt.Rows.Add(dr);
dataGridView1.DataSource = dt;

ここに画像の説明を入力してください

于 2013-01-14T23:11:40.317 に答える
2

私も同じ問題を抱えていました。次の SQL で満たされている DataSet がありました。

"SELECT nombre, CASE WHEN fecha IS NULL THEN 0 ELSE 1 END AS baja"

割り当て

dtgEmpleado.DataSource = ds.Tables(0)

With dtgEmpleado
    .Columns(0).HeaderText = "Nombre"
    .Columns(0).DataPropertyName = "nombre"
    .Columns(0).Name = "nombre"
    .Columns(0).Width = 100
    .Columns(1).HeaderText = "Baja"
    .Columns(1).DataPropertyName = "baja"
    .Columns(1).Name = "baja"
    .Columns(1).Width = 70
End With

「チェックボックス」として表示されていた「バハ」列が欲しかったのです。

私はそれを行うことができます:

AutoGenerateColumns = False

しかし、より簡単な方法として、SQL 文を次のように変更します。

"SELECT nombre, CAST(CASE WHEN fecha IS NULL THEN 0 ELSE 1 END AS BIT) AS baja"
于 2016-08-08T14:19:07.133 に答える
1
Dim cell As DataGridViewCell = New DataGridViewCheckBoxCell()

With DataGridView1
    With .Columns(1)
        .CellTemplate = cell
    End With
End With

編集:

DataGridViewこれは提案です。自分自身にクエリを実行すると生成されるため、設計時に列を追加しようとしないでください。DataGridViewCheckBoxCell

GetData("SELECT myInt AS Id, myBool AS Bool, myString AS String " & _
        "FROM " & myFavTable & " " & _
        "WHERE (myInt > 100) ORDER BY myString")


Me.dataAdapter.Fill(myTable)
Me.bindingSource1.DataSource = myTable

DataGridView1.DataSource = bindingSource1;
于 2013-01-14T23:12:51.120 に答える