winform页面加载时,如何改变DataGridViewButtonColumn按钮值

lixupeng5258 2014-09-02 03:14:32
在datagridview中加了一排DataGridViewButtonColumn按钮列,页面加载时,要查询数据库,根据不同的情况赋予不同的值。网上查了好久,就是不行,以下是我的代码,请帮忙看看哪里写错了


private void Room_Load(object sender, EventArgs e)
{
string sql = "select RoomNum as 房间号 from T_Room_Info where JQH=1 order by RoomNum";
DataSet ds = DbHelperSQL.Query(sql);
dgv_one.DataSource = ds.Tables[0];

DataGridViewButtonColumn col_btn_insert = new DataGridViewButtonColumn();
col_btn_insert.HeaderText = "操作";
col_btn_insert.Text = "打开";
col_btn_insert.DefaultCellStyle.NullValue = true;
col_btn_insert.UseColumnTextForButtonValue = true;//
dgv_one.Columns.Add(col_btn_insert);

int row;

for (row = 0; row < this.dgv_one.RowCount; row++)
{
string roomnum = this.dgv_one[0, row].Value.ToString();
string sql_state = "select * from T_VideoCamera where DoorBH='" + roomnum + "' and ifuse=1";
DataSet ds_state = DbHelperSQL.Query(sql_state);
if (ds_state.Tables[0].Rows.Count > 0)
{
this.dgv_one.Rows[row].Cells[1].Value = "打开";
}
else
{
this.dgv_one.Rows[row].Cells[1].Value = "关闭";//这句话就是赋值不成功
// MessageBox.Show(this.dgv_one.Rows[row].Cells[1].Value.ToString());//这样写又能取到原始值为“打开”
}
}

}
...全文
367 24 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
lixupeng5258 2014-09-02
  • 打赏
  • 举报
回复
引用 22 楼 Z65443344 的回复:
你确定不是数据查询出错,导致代码没有执行? 绑定dt不变,你把查询数据库拿掉,直接循环赋值,看什么状况
我试过,全部空白的,一定要把前面 string sql = "select RoomNum as 房间号 from T_Room_Info where JQH=1 order by RoomNum"; DataSet ds = DbHelperSQL.Query(sql); dgv_one.DataSource = ds.Tables[0]; 这段代码去掉,才能赋值
於黾 2014-09-02
  • 打赏
  • 举报
回复
还有,我看你用的是cell[1] 你dt只有1列?
於黾 2014-09-02
  • 打赏
  • 举报
回复
你确定不是数据查询出错,导致代码没有执行? 绑定dt不变,你把查询数据库拿掉,直接循环赋值,看什么状况
於黾 2014-09-02
  • 打赏
  • 举报
回复
我绑了个dt,没问题啊.
lixupeng5258 2014-09-02
  • 打赏
  • 举报
回复
引用 19 楼 Z65443344 的回复:
col_btn_insert.Text = "打开"; 这句没用了.因为后面直接操作value了,跟它没关系了 现在什么现象,按钮全是空白的?
是的。我好像找到原因了,前面给他绑了个数据源就会有问题,不绑数据源,就可以赋值成功
於黾 2014-09-02
  • 打赏
  • 举报
回复
col_btn_insert.Text = "打开"; 这句没用了.因为后面直接操作value了,跟它没关系了 现在什么现象,按钮全是空白的?
lixupeng5258 2014-09-02
  • 打赏
  • 举报
回复
我好像找到原因了,前面给他绑了个数据库就会有问题,不绑数据源,就可以赋值成功
lixupeng5258 2014-09-02
  • 打赏
  • 举报
回复
引用 15 楼 Z65443344 的回复:
把你修改后的代码再贴出来看看

        private void Room_Load(object sender, EventArgs e)
        {
            string sql = "select RoomNum as 房间号 from T_Room_Info where JQH=1 order by RoomNum";
            DataSet ds = DbHelperSQL.Query(sql);
            dgv_one.DataSource = ds.Tables[0];
            DataGridViewButtonColumn col_btn_insert = new DataGridViewButtonColumn();
            col_btn_insert.HeaderText = "操作";
            col_btn_insert.Text = "打开";

            dgv_one.Columns.Add(col_btn_insert);


            for (int row = 0; row < this.dgv_one.RowCount; row++)
            {
                string roomnum = this.dgv_one[0, row].Value.ToString();
                string sql_state = "select * from T_VideoCamera where DoorBH='" + roomnum + "' and ifuse=1";
                DataSet ds_state = DbHelperSQL.Query(sql_state);
                if (ds_state.Tables[0].Rows.Count > 0)
                {
                    this.dgv_one.Rows[row].Cells[1].Value = "打开";
                }
                else
                {
                    this.dgv_one.Rows[row].Cells[1].Value = "关闭";
                }
            }
            
        }
於黾 2014-09-02
  • 打赏
  • 举报
回复
把你修改后的代码再贴出来看看
lixupeng5258 2014-09-02
  • 打赏
  • 举报
回复
引用 12 楼 xianfajushi 的回复:

            DataGridViewButtonColumn 按钮 = new DataGridViewButtonColumn();
            按钮.HeaderText = "操作";
            列表.Columns.Add(按钮);
            for (int 行 = 0; 行 < 列表.RowCount; 行++)
                列表.Rows[行].Cells[3].Value = 行 % 2 == 0 ? "打开" : "关闭";
我按你的一模一样的代码都不能赋值成功,是不是要哪里设置下
lixupeng5258 2014-09-02
  • 打赏
  • 举报
回复
引用 11 楼 Z65443344 的回复:
col_btn_insert.DefaultCellStyle.NullValue = true; 把这句也拿掉,就不出错了 这句指定了单元格初始值是空 而button的text如果是空,当然就出错了
我全都拿掉了,但他还是不能重新赋值,你赋值时和我一样在Form_Load方法里写个循环给赋值的吗
  • 打赏
  • 举报
回复

            DataGridViewButtonColumn 按钮 = new DataGridViewButtonColumn();
            按钮.HeaderText = "操作";
            列表.Columns.Add(按钮);
            for (int 行 = 0; 行 < 列表.RowCount; 行++)
                列表.Rows[行].Cells[3].Value = 行 % 2 == 0 ? "打开" : "关闭";
於黾 2014-09-02
  • 打赏
  • 举报
回复
col_btn_insert.DefaultCellStyle.NullValue = true; 把这句也拿掉,就不出错了 这句指定了单元格初始值是空 而button的text如果是空,当然就出错了
於黾 2014-09-02
  • 打赏
  • 举报
回复
拿掉之后,你需要给每个单元格赋值,不能是空
udxiaos 2014-09-02
  • 打赏
  • 举报
回复
應該不是賦值的問題.這個應該可以的. 你給btn加個name屬性.複製的時候用name屬性試試
於黾 2014-09-02
  • 打赏
  • 举报
回复
实际上就是 col_btn_insert.Text = "打开"; 和 col_btn_insert.UseColumnTextForButtonValue = true 他俩冲突了 你一开始赋值不是循环赋值给每个button,而是给整个列一个文本 然后指定每个单元格的值都等于这个文本 所以就改不了了 如果单纯的拿掉,那么不赋值的单元格会报错 必须都赋值,开始或关闭.
lixupeng5258 2014-09-02
  • 打赏
  • 举报
回复
引用 5 楼 Z65443344 的回复:
col_btn_insert.Text = "打开"; col_btn_insert.DefaultCellStyle.NullValue = true; col_btn_insert.UseColumnTextForButtonValue = true;// 亲测,这句去掉就好了
麻烦把你的代码贴出来看看,为什么我去掉整个就出错了
  • 打赏
  • 举报
回复
应该放到 CellPainting 事件中吧,只有单元格绘制的时候根据值,对value进行不同的赋值。
於黾 2014-09-02
  • 打赏
  • 举报
回复
col_btn_insert.Text = "打开"; col_btn_insert.DefaultCellStyle.NullValue = true; col_btn_insert.UseColumnTextForButtonValue = true;// 亲测,这句去掉就好了
加载更多回复(4)

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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