首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DataGridView CheckBox列-显示CheckBox但存储字符串

DataGridView CheckBox列-显示CheckBox但存储字符串
EN

Stack Overflow用户
提问于 2016-01-27 07:29:54
回答 1查看 1.2K关注 0票数 1

这是我的代码:

代码语言:javascript
运行
复制
public partial class Form1 : Form
{
    SqlCommandBuilder cmbl;
    string con = "Data Source=localhost;Initial Catalog=db;Persist Security Info=True;User ID=sa;Password=1234";
    SqlDataAdapter sdaHFP;
    string QueryDgvHFP = "SELECT * FROM HFP";
    DataTable dtHFP;
    SqlConnection cn;

    public Form1()
    {
        InitializeComponent();
    }
    private void Form1(object sender, EventArgs e) 
    {
        sdaHFP = new SqlDataAdapter(QueryDgvHFP, con);
        dtHFP = new DataTable();
        sdaHFP.Fill(dtHFP);

        foreach (DataRow item in dtHFP.Rows)
        {
            int n = dgvHFP.Rows.Add();
            dgvHFP.Rows[n].Cells[0].Value = item["HFP"].ToString();
            dgvHFP.Rows[n].Cells[1].Value = item["YearPeriod"].ToString();
            if (item["Active"].ToString() == "Y")
            {
                dgvHFP.Rows[n].Cells[2].Value = true;
            }
            else
            {
                dgvHFP.Rows[n].Cells[2].Value = false;
            };
            dgvHFP.Rows[n].Cells[3].Value = item["ID"].ToString();
        }
    }

这是将数据从Sql查询加载到DataGridView,我在此代码中添加了一个用于执行、更新或插入的按钮:

代码语言:javascript
运行
复制
private void btUpdate_Click(object sender, EventArgs e)
{
    try
    {
        cmbl = new SqlCommandBuilder(sdaHFP);
        sdaHFP.Update(dtHFP);
        MessageBox.Show("Success", "Update", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

当我在DataGridView中更新/插入数据并单击该更新按钮时,将出现一个成功的MessageBox,但数据库中的数据既未更新也未插入

请帮我解决这个问题,为什么更新按钮不能工作?

非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-27 08:53:13

应该将DataGridView绑定到DataTable,然后在更改单元格值或添加或删除行时,这些更改将应用于DataTable。然后可以使用TableAdapter保存数据表更改。

代码语言:javascript
运行
复制
this.dataGridView1.DataSource = dataTable;

注意:用于存储true/falseYes/No值,最好在server中使用bit数据类型。但在下面的示例中,我假设您需要将值存储为Y/N作为nvarchar(50),然后设置一个DataGridViewCheckBoxColumn以支持编辑字符串列。

示例

假设我们有一个表Table1

代码语言:javascript
运行
复制
Column1: int, primary key
Column2: nvarchar(50), Allows Null, Containing Y or N as vaule

我们希望在一个Table1中编辑DataGridView的数据。

下面是可以用来加载、编辑和保存数据的代码:

代码语言:javascript
运行
复制
private DataTable table; 
private SqlDataAdapter dataAdapter;

private void sampleForm_Load(object sender, EventArgs e)
{
    var command = "SELECT * FROM Table1";
    var connection = @"Your connection string";
    table = new DataTable();
    dataAdapter = new SqlDataAdapter(command, connection);
    var commandBuilder = new SqlCommandBuilder(dataAdapter);
    dataAdapter.Fill(table);

    //Set false as default value for Column2
    table.Columns["Column2"].DefaultValue = false;

    var column1 = new DataGridViewTextBoxColumn();
    column1.Name = "Column1";
    column1.DataPropertyName = "Column1";

    var column2 = new DataGridViewCheckBoxColumn();
    column2.Name = "Column2";
    column2.DataPropertyName = "Column2";
    column2.TrueValue = "Y";
    column2.FalseValue = "N";

    this.dataGridView1.Columns.Add(column1);
    this.dataGridView1.Columns.Add(column2);

    //Bind grid to table
    this.dataGridView1.DataSource = table;
}

private void saveButton_Click(object sender, EventArgs e)
{
    //Save data
    this.dataGridView1.EndEdit();
    dataAdapter.Update(table);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35031201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档