小弟用DataGrid绑定了一个DataTable。在DataTable中有一列是性别。在数据库中我是使用0和1来表示男女的。可我想在datagrid中使用“男”和“女”来显示。
我知道,如果可以在存储过程中使用when和case等语句实现这样的转变,可我现在用的是sql查询语句,所以我不知道该怎么办了?求教各位达人?
小弟的要求是,实现上面的转换。但不改变DataTable中的存储格式,即只是在绑定的时候才转换,在DataTable中还是以0和1的方式来表示。

解决方案 »

  1.   

    select 
        f1,f2,
        f3=CASE WHEN sexField=0 THEN '男' ELSE '女' END
    from table1
      

  2.   

    1.在DataGrid绑定grid_ItemDataBound事件
    2.在grid_ItemDataBound中加
    private void grid_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
      if((e.Item.ItemType==ListItemType.Item)|| e.Item.ItemType==ListItemType.AlternatingItem))
      {
    int Sex = (int)DataBinder.Eval(e.Item.DataItem, "Sex");
    e.Item.Cells[2].Text=Sex==0?"女":"男";
      }
      

  3.   

    gyf19(秋天的云),谢谢了。可小弟是个新手,能不能给点清楚地提示。grid_ItemDataBound事件该在什么位置绑定呢?还有你给的那个事件函数也看得不是很懂?
      

  4.   

    <#DataBinder.Eval(Container.DataItem,"Sex").ToString()=="0"?"男":"女"%>
      

  5.   

    你在aspx页面中的datagrid控件的属性中,到事件栏中的ItemDataBound上双击,会自动在.cs中生成一个事件,然后在事件中加入:
    if((e.Item.ItemType==ListItemType.Item)|| e.Item.ItemType==ListItemType.AlternatingItem))
      {
    int Sex = (int)DataBinder.Eval(e.Item.DataItem, "Sex");
    e.Item.Cells[2].Text=Sex==0?"女":"男";
      }
      

  6.   

    private void grid_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
      if(e.item.itemindex >=0)   这个是指定绑定datagrid的数据项才用上下面这句
      {
    int Sex = (int)DataBinder.Eval(e.Item.DataItem, "Sex"); 得到数据源数据项中sex的内容
    e.Item.Cells[2].Text=(Sex==0?"女":"男"); 改变datagrid性别列的值
      }

      

  7.   

    行 123:if((e.Item.ItemType==ListItemType.Item)|| (e.Item.ItemType==ListItemType.AlternatingItem))
    行 124:{
    行 125: int Sex = (int)DataBinder.Eval(e.Item.DataItem, "Sex");
    行 126: e.Item.Cells[2].Text = Sex == 0 ? "女" : "男";
    行 127:}
    我按大家的说法作了。可提示说制定的转换无效。错误的地方为125行
    在datagrid中关于性别的绑定语法为
    <asp:BoundColumn DataField="Sex" HeaderText="性别">
      <HeaderStyle HorizontalAlign="Center" Width="30px"></HeaderStyle>
      <ItemStyle HorizontalAlign="Center"></ItemStyle>
    </asp:BoundColumn>为什么会出错呢?谢谢大家了
     
      

  8.   

    那你换成这样吧int Sex = (int)e.Item.cells[2].Text.Trim();
      

  9.   

    private void grid_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
      if(e.Item.ItemIndex != -1)
      {
    int Sex = Convert.ToInt32(e.Item.Cells[2].Text);
    e.Item.Cells[2].Text =(Sex==0?"女":"男");  
      }
      

  10.   

    值对于 Int32 太大或太小。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。异常详细信息: System.OverflowException: 值对于 Int32 太大或太小。源错误: 行 123:if(e.Item.ItemIndex != -1)
    行 124:{
    行 125: int Sex = Convert.ToInt32(e.Item.Cells[2].Text);
    行 126: e.Item.Cells[2].Text =(Sex==0?"女":"男");  
    行 127:}
     
    源文件: d:\work\sloa\componentpage\hr\employeeinfomanage.aspx.cs    行: 125 呵呵还是有错的
      

  11.   

    如果你在绑定的时候使用模板列,那么你可以这样写:
    <asp:Label id=Label1 runat=server Text='<#DataBinder.Eval(Container.DataItem,"Sex").ToString()=="0"?"男":"女"%>' />
    当然,前提是你的Sex字段确实是为0或为1