<asp:TemplateColumn HeaderText="状态">
  <ItemStyle Width="80px"></ItemStyle>
    <ItemTemplate>
      <asp:Label ID="lbl_state" Runat="server"
          Text='<%# DataBinder.Eval(Container.DataItem, "is_internal") %>'>
      </asp:Label>
  </ItemTemplate>
</asp:TemplateColumn>这样写只能得到数字 0, 1, -1, 而不是我想要的 "注册, 审核, 作废"

解决方案 »

  1.   

    写一个函数
    string changeit(string a){
     if (a=="0") return "注册";
    else if(a=="1") return "审核";
    else return "作废";
    }
    绑定时
    <%# change(DataBinder.Eval(Container.DataItem, "is_internal")) %>'
      

  2.   

    在DataGrid_ItemCreate事件中
    if (e.Items.cell[0].text == 0)
    {
        e.Items.cell[0].text == "注册"
    }
    试试!
      

  3.   

    <%#  %> 里能写什么东西啊? 能不能不用写客户端脚本直接用C#的多个表达式搞定?
    比如:
    switch (state)
    {
      case 0:  return "注册";
      case 1:  return "审核";
      case -1:
      default: return "作废";
    }
    之类的?
    <%# change(DataBinder.Eval(Container.DataItem, "is_internal")) %>
      

  4.   

    补充:
    -----------------------
    <%# change(DataBinder.Eval(Container.DataItem, "is_internal").ToString()) %>'
      

  5.   

    sjc0() ( ) :cell[i] 这个写法很危险.
      

  6.   

    quickstart例子:
    <html>
    <head>
         <script language="C#" runat="server">        void Page_Load(Object Src, EventArgs E) {            if (!Page.IsPostBack) {               ArrayList values = new ArrayList();               values.Add (0);
                   values.Add (1);
                   values.Add (2);
                   values.Add (3);
                   values.Add (4);
                   values.Add (5);
                   values.Add (6);               DataList1.DataSource = values;
                   DataList1.DataBind();
                }
            }        String EvenOrOdd(int number) {
                if ((number % 2) == 0)
                  return "偶数";
                else
                  return "奇数";
            }    </script></head>
    <body>    <h3><font face="宋体">到方法和表达式的数据绑定</font></h3>    <form runat=server>      <asp:DataList id="DataList1" runat="server"
            BorderColor="black"
            BorderWidth="1"
            GridLines="Both"
            CellPadding="3"
            CellSpacing="0"
            >        <ItemTemplate>
              数字值:<%# Container.DataItem %>
              偶/奇:<%# EvenOrOdd((int) Container.DataItem) %>
            </ItemTemplate>      </asp:datalist>    </form></body>
    </html>
      

  7.   

    用的什么数据库?
    Sql语句就可以搞定,语句执行的时候就可以返回想要的值
      

  8.   

    sql server 2k原始数据类型是 tinyint, 查询一次放起来, 其它地方还要用到, 不能都弄成显示时的样子,要不其它地方处理不方便
      

  9.   

    在后台将state值用case语句转化成注册,审核,作废.
      

  10.   

    对啊,在sql语句里面处理就行了
      

  11.   

    假如你的DataGrid 的ID为DataGrid1 你可以这样子来做:
    for(int i = 0;DataGrid1.Item.Length;i ++)
    {
     Label lbl_state = DataGrid1.Item[i].FindControl("lbl_state");
     switch (Convert.ToInt32(lbl_state.ToString())
    {
      case 0:  
       lbl_state.Text = "注册";
       break ;       
      case 1:  
       lbl_state.Text = "审核";
       break;
      case -1:
       lbl_state.Text = "作废";
         break;
      default: break; }
    }
    }
      

  12.   

    该问题已经得到解决, 感谢各位帮助和启发. 结贴
    我是这样作的:
    .cs 中给本类写一个方法:public string state_as_string(int state)
    { switch(state)
      { case 0:   return "未审核";
        case 1:   return "已审核";
        case -1:  
        default:  return "作废";
      }
    }.aspx 页面文件里直接引用<asp:TemplateColumn>
    <ItemTemplate>
       <asp:Label ID="lbl_state" Runat="server"
         Text='<%# state_as_string(Convert.ToInt32(DataBinder.Eval(Container.DataItem, "is_internal").ToString())) %>'>
       </asp:Label>
    </ItemTemplate>
    </asp:TemplateColumn>
    这样就不必写 javascript了, 因为我对javascript不熟.