caf20012 Ответов: 2

Datagridview-флажок показывать как да или нет


Привет,

У меня есть datagridview, который имеет столбец для флажка, но при его выборе отображается следующий код
System.Windows.Forms.CheckBox, CheckState: 1
А не просто чек, а если чек = Да, а не чек = нет.

Как я могу изменить его, чтобы показать да и нет, а не checkstate:1

Код:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    table.Rows.Add(TextBox1.Text, TextBox2.Text, TextBox3.Text, TextBox4.Text, ComboBox1.SelectedItem.ToString(), DateTimePicker1.Text, Label8.Text, PictureBox1.Image, CheckBox1.ToString)
    DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
    DataGridView1.RowTemplate.Height = 100
    DataGridView1.AllowUserToAddRows = False
    DataGridView1.DataSource = table


Что я уже пробовал:

Искал форумы, но не соответствует тому, как я объявляю столбцы своей внешней базой данных.

2 Ответов

Рейтинг:
1

Bryian Tan

Я думаю, что самый простой способ-это изменить источник на вывод Yes/No вместо true/false. Но, если это не выполнимо, вы также можете написать код для манипулирования DataTable(я предполагаю, что table = DataTable). Вот пример, не типобезопасный, но вы можете его улучшить. Ниже функции будут меняться логический тип столбца в строку и ее значение Да/нет.

Public Shared Function ChangeColumnDataType(ByRef table As DataTable, columnname As String, newtype As Type) As Boolean
    If table.Columns.Contains(columnname) = False Then
        Return False
    End If

    Dim column As DataColumn = table.Columns(columnname)
    If column.DataType = newtype Then
        Return True
    End If

    Try
        Dim newcolumn As New DataColumn("temporary", newtype)
        table.Columns.Add(newcolumn)
        For Each row As DataRow In table.Rows
            Try
                row("temporary") = Convert.ChangeType(row(columnname), newtype)
                row("temporary") = If(CBool(row(columnname)), "Yes", "No")
            Catch
            End Try
        Next
        table.Columns.Remove(columnname)
        newcolumn.ColumnName = columnname
    Catch generatedExceptionName As Exception
        Return False
    End Try

    Return True
End Function

Затем вызовите функцию ChangeColumnDataType перед привязкой источника данных. Я предполагаю, что имя столбца - " активный"
ChangeColumnDataType(table, "Active", GetType(String))
DataGridView1.DataSource = table

Источник:
c# - изменение заполненных типов данных столбцов DataTable-переполнение стека[^]


Рейтинг:
0

CHill60

Часть вашей проблемы заключается в том, что вы преобразуете объект CheckBox1 в строку, а не в его значение.

Есть несколько способов сделать это правильно:

1. CheckBox1.CheckState.ToString() даст вам "проверено" / " Непроверено"

2. CheckBox1.Checked.ToString() даст вам "истину" / " ложь"

3. IIf(CheckBox1.Checked, "Yes", "No") даст вам "Да" / " нет"