数据库中有一列为flg,内容为1,0
1表示已查看,0表示未查看
怎样才能在dataGridView中的flag列中显示已查看和未查看,而不是1和0数据绑定: dt = database.GetDataSet(sql);
            this.dataGridView1.DataSource = dt.Tables[0];

解决方案 »

  1.   

    数据绑定的时候转换吧DataRowView row = (DataRowView) e.Item.DataItem;
    if (row != null)
    {
        if (row["XX"].ToString() == "0")
        {
    e.Item.Cells[8].Text = "XX";
        }
    }
      

  2.   

    可以多种方法实现的。
     数据库方法:  select *, case when flag =1 then '已查看' else '未查看' end as flag from tb ....  数据逻辑层方法: foreach for等循环,一条条判断,如果是1就重新对dataview赋值。 页面方法:有行绑定事件,在每一行绑定时,替换掉你要显示的内容。
      

  3.   

    你也可以把dt.Tables[0]里面的数据字段flg转化一下
    foreach(DataRow dr in dt.Tables[0].rows)
    {
    if(dr["flg"].Tostring=="1")
    {
    dr["flg"]="已查看";
    }
    else
    {
    dr["flg"]="未查看";
    }
    }
      

  4.   

    补充上面的:
    dt.Columns.Add("flag_ch");
    dt.Columns["flag_ch"].Expression = "iif(id=1,'是','否')";
    dataGridView1.DataSource =dt;dt可以事先定义好架构后由DataAdapter来Fill数据。
      

  5.   

    其实我也不会。11楼的没试过。WPF上有个IValueConverter可以解决这个问题。
    2楼的办法看起来对,但好像是asp.net的打法,而且就算是asp.net,出现e.Item.Cells[8].Text = "XX";就已经有点不‘正规’了。其实这类问题用查询语句中作转换是相当无趣的。
    绑定过程中修改比较正规,不过貌似目前为止在我看来还没有一个正确的回复。
      

  6.   

    前台用模板绑定该列然后这样绑定<%# Eval("flg")==null?"":Eval("flg").ToString() == "1"?"已查看":"未查看"%>
      

  7.   

    刚刚在网上搜到把外键列(比如Products表的CategoryID列)转换成DataGridViewComboBoxColumn后把该列的DisplayStyle设为None的玩法。这个用在楼主这里像是有点那个:-)不过还是有点意思,值得参考一下。
      

  8.   

    这个列要不要编辑呢?
    要编辑的话, 你可以用 CheckBox 列, 也可以用 Combobox列只是显示用, 可以用普通的 Textbox 列, 定制 Cell Format 事件做转换即可,
    每个单元个 有 Value, FormatedValue 2 个值的.