问题描述:
1 工程是C#WebForm,数据库是SqlServer 2005
2 数据库表单中有个字段名叫status,类型为bit(boolean)
3 CString sql="select * from......"
4 GridView1.DataSource = ds;
  GridView1.DataBind();
5 假设status是第五列
   for (int i = 0; i < GridView1.Rows.Count;i++ )
                 {
                     
                     GridView1.Rows[i].Cells[5].Text = "已借出";
                   
                    
                 }
这样将所有的第五列数据都变成了“已借出”
6  现在我想根据bit的值来将结果变成对应的“已借出”或“已归还”
即 如下这个模样
          for (int i = 0; i < GridView1.Rows.Count;i++ )
                 {
                     if (GridView1.Rows[i].Cells[5].Text == "True ")//(1)关键是这里
                     {
                         GridView1.Rows[i].Cells[5].Text = "已借出";
                     }
                     else
                     {
                         GridView1.Rows[i].Cells[5].Text = "已归还";
                     }
                    
                 }
但是 (1)语句并没有起到判断的作用,请问(1)这个地方应该如何写

解决方案 »

  1.   

    bit有true的说法吗
    不应该是单个的位吗
    你的数据库值应该用T代替true,用F代替FALSE吧
    这样判断值是T还是F啊
      

  2.   


    应该有的
    true和false也不过就是 0和1
    sqlServer2005中,bit类型那里我写入的是"True"和"Flase"
    我就是不知道(1)那个判断的地方应该怎么判断
      

  3.   

    你应该把这列编辑成模板列,
    或者直接判断Value
    if (GridView1.Rows[i].Cells[5].Value== True)
      

  4.   

    winform中可以这么写:
    Value = True;
    Web中你试试看可不可以……
      

  5.   


    table cells 并不包含value这个属性
      

  6.   

    GridView1.Rows[i].Cells[5].Text 
    这个值是什么?确定是这列么
      

  7.   


    这个是表格上的显示的文本值
    这么说吧
    for (int i = 0; i < GridView1.Rows.Count;i++ )
    {GridView1.Rows[i].Cells[5].Text = "111";
    }
    可以把表显示的第五列的所有的值改成“111”
    “确定是这列么“
    我十分确定是这一列
      

  8.   

      可以将第五列在GridView1中编辑列,转换成TemPlateFiled在通过在GridView1中用FindControl的方式找到控件进行更改。可以试一试用这个方法。
       for (int i = 0; i < this.GridView1.Rows.Count;i++ )
                {
                    Label label1 = this.GridView1.Rows[i].FindControl("Lable的Id") as Label;
                    if (label1.Text == "True")
                    {
                        label1.Text = "已借出";
                    }
                    else
                    {
                        label1.Text = "已归还";
                    }
                }
      

  9.   

    5 假设status是第五列
    for (int i = 0; i < GridView1.Rows.Count;i++ )
    {GridView1.Rows[i].Cells[5].Text = "已借出";
    }
    这样将所有的第五列数据都变成了“已借出”
    第五列是不是GridView1.Rows[i].Cells[4].Text ?
      

  10.   

    if (GridView1.Rows[i].Cells[5].Text == "True ")//(1)关键是这里
    什么都不改的话这里如果显示的是true/false/1/0之类的话:
    if(Convert.ToBooleen(GridView1.Rows[i].Cells[5].Text)) //手写,ToBooleen可能有错
      

  11.   


    你没有说的point,第五列还是第四列我不关心,就假设是第四列吧
      

  12.   


    什么都不写,表将会显示CheckBox那样的东东
    如果是True,checkBox会打上勾
    如果false,checkBox不会打勾
      

  13.   

    CheckBox cb = (CheckBox)GridView1.Rows[i].Cells[5].ChildControls[0];//ChildControls?
    if (cb.Selected)//Selected?
      

  14.   

    很可惜。。你说的“没错“,但是解决不了我的问题
    因为 GridView1.Rows[i].Cells[5].Text这里是字符串是空的。。
    我想当然了
      

  15.   

    现在问题变为:
      如何在gridView中bit类型的值
      

  16.   

    13#应该可以。
    从你问的问题来说,我有以下建议:
    1.你可以深入了解一下gridview..模板列,代码赋值,gridview有数据绑定事件,可以在代码上根据数据值自由赋值
    2.数据库里的bool字段用着麻烦就不用,tinyint 用0,1表示
      

  17.   

    结贴了。
    习惯性小评一下:
    这个问题最后我采用绕道的办法解决了:在SQL语句中将表单的值直接改了。就是说在gridView1.dataBind()之前就已经完成了修改,而不是我发帖需求的、在gridView1.dataBind()之后。#8的方法我试了,卡在"this.GridView1.Rows[i].FindControl("Lable的Id") ".我跟踪调试了下,这个“Lable的id”我写的是表的“列名”,我跟踪了下,发现this.GridView1.Rows[i].FindControl("Lable的Id") .Text结果很怪,匪夷所思。
    #13最接近真相。我查了MSDN,确实像#13那样,可以将一个string变量转变成boolean变量。很可惜,我获得的gridView.text==null 。我自己分析,GridView 和 通过SQL 查询数据库生成的搜索结果集是两个东西,是后来我通过GridView.DataBind()将他们绑定在的一起。GridView.text只负责显示,而不是数据源。#8 5分
    #13 15分
    分不多,但是一番心意,请笑纳
      

  18.   

    CheckBox cb = (CheckBox)GridView1.Rows[i].Cells[5].Controls[0];
    if (cb.Checked)
    已验证!