<asp:BoundColumn DataField="STOCK_QTY" ReadOnly="True" HeaderText="存存总值">
<HeaderStyle HorizontalAlign="Center" Width="40px"></HeaderStyle>
<ItemStyle HorizontalAlign="Left" Width="40px"></ItemStyle>
</asp:BoundColumn>如上:有什么方法控制STOCK_QTY在为0时显示为"-"?首先:由于程序要求,不能使用"用模板列".
有没有其它办法?另:在http://community.csdn.net/Expert/topic/4931/4931868.xml?temp=.8163568讨论过一些
方法,但都行不通.以下方法都未能行通:
1):出现Specified argument was out of the range of valid values错误
你可以在itemdatabound事件里面写代码
if(e.item.itemindex>=0)
{
   string temp = e.item.cells[i].text.trim(); //请注意你自己的代码大小写,另外i是你这个绑定列的列序数
   if(temp =="0")
     e.item.cells[i].text = "-";
}
2)select case when 及ISNULL都出现:
"Arithmetic overflow error converting varchar to data type numeric错误,
原是:不能把数字转换为"-"

解决方案 »

  1.   

    select ...,case when STOCK_QTY=0 then '-' else STOCK_QTY end, ...
      

  2.   

    2)select case when 及ISNULL都出现:
    "Arithmetic overflow error converting varchar to data type numeric错误,
    原是:不能把数字转换为"-"---------------
    把你的SQL贴出来看看。
      

  3.   

    在将数据提取到DataTable时,添加一列,该列中的值根据STOCK_QTY列的值产生.如果STOCK_QTY=0时,就将新增列的值设置为"-".然后绑定数据.最后绑定列的DataFiled属性改一下就可以了.
      

  4.   

    这个我认为你可以直接在数据库里面处理就好了。
    例如:取数据的时候
    case when STOCK_QTY when 0 then '-' else STOCK_QTY end
    照着这样处理下就好了.
      

  5.   

    case when STOCK_QTY when 0 then '-' else STOCK_QTY end
    这种方式不行,我在上面已经说过,不信可以试一试.
      

  6.   


    贴你的SQL,你那个字段是什么类型的/
      

  7.   

    呵呵,很多人都想到在SQL语句那里处理,的确,那里是最方便的,不过,可不要忘了,那个列本来是数字类型的,你用-当然不行啦。试试把列转为字符型,必须把非0数字转为字符,为0转为-,当然,如果你这么做,就只能查询数据,而不能修改数据了。此外,如果数据了不大,可以写一个客户端js脚本,等加载完以后,用js把那一列为0的,都换成-,这样是一定可以的,并且,不会消耗服务器的资源
      

  8.   

    这是我的源码:
    CREATE PROCEDURE dbo.Get_VendorBom
    (@Item_No nvarchar(20))
    AS
     SET NOCOUNT ON 
    SELECT ITEM_NO,ITEM_DESCC AS ITEM_NAME,
          CASE dbo.f_get_qty(ITEM_NO,'STOCK_QTY') WHEN 0 THEN '-' ELSE dbo.f_get_qty(ITEM_NO,'STOCK_QTY') END AS STOCK_QTY,
          CASE dbo.f_get_qty(ITEM_NO,'ORDER_QTY') WHEN 0 THEN '-' ELSE dbo.f_get_qty(ITEM_NO,'ORDER_QTY') END AS ORDER_QTY,
          CASE dbo.f_get_qty(ITEM_NO,'MRP_QTY')   WHEN 0 THEN '-' ELSE dbo.f_get_qty(ITEM_NO,'MRP_QTY') END AS MRP_QTY
        FROM KGMS2DB..ITEMMSTR
        WHERE ITEM_NO LIKE LEFT(@ITEM_NO,18)+'%'
        GROUP BY ITEM_NO,ITEM_DESCC
        ORDER BY ITEM_NO
       SET NOCOUNT OFF
    RETURN
      

  9.   

    这样太麻烦了,还是在.net里处理吧 写个函数处理
    页面
    <asp:TemplateColumn HeaderText="存存总值">
    <ItemTemplate>
          <%# getString( DataBinder.Eval(Container.DataItem ,'STOCK_QTY'))%>
    </ItemTemplate>
    </asp:TemplateColumn>后台cs函数:
    protected string getString(object col)
    {
       return col.ToString()=="0"?"-":col.ToString();
    }
    所有需要处理为 '-'的列都调用这此函数,
    (未测试,仅供参考,一定可以实现的)
      

  10.   

    case when STOCK_QTY when 0 then '-' else to_Char(STOCK_QTY) end 你这样看看
      

  11.   

    因为,你选出来的一个列,不能出现两种类型, 0是NUMBER,‘-’这个是char,你把两个类型统一一下就可以了
      

  12.   

    ----
    以下方法都未能行通:
    1):出现Specified argument was out of the range of valid values错误
    你可以在itemdatabound事件里面写代码
    if(e.item.itemindex>=0)
    {
       string temp = e.item.cells[i].text.trim(); //请注意你自己的代码大小写,另外i是你这个绑定列的列序数
       if(temp =="0")
         e.item.cells[i].text = "-";
    }
    2)select case when 及ISNULL都出现:
    "Arithmetic overflow error converting varchar to data type numeric错误,
    原是:不能把数字转换为"-"显示应该都没有问题的,应该是修改或新增的时从此以后不能将"-"存入数据库!
    看你的报错应该是这样的问题。你存数据库的时候应该把“-”再替换为0就没有问题了。