2013-02-27 51 views
0

我有以下WebMethod -返回修改后的DataSet

[WebMethod] 

public DataSet fillGridview(string sql) 
{ 
    using (OdbcConnection cnn = new OdbcConnection(DBcon)) 
    { 
     if (string.IsNullOrEmpty(sql)) 
     { 
      sql = "statement"; 
     } 



     OdbcDataAdapter da = new OdbcDataAdapter(sql, cnn); 
     DataSet ds = new DataSet(); 
     da.Fill(ds, "DB.TABLE"); 

     char tick = (char)0x221A; 
     char untick = (char)'x'; 
     int r = 0; 
     foreach (DataRow row in ds.Tables[0].Rows) 
     { 

      if (ds.Tables[0].Rows[r]["intValue"].ToString() == "-1") 
      { 
       ds.Tables[0].Rows[r]["intValue"] = untick + " No"; 
      } 
      else 
      { 
       ds.Tables[0].Rows[r]["intValue"] = tick + " Yes"; 
      } 

      r = r + 1; 

     } 


     return ds; 

    } 

这是试图要么1√ Yes-1intValue转换为x No时断裂。

错误时正在 -

输入字符串的不正确的格式。无法在intValue列中存储<√是>。预期的类型是Int32。

这可能吗?

+0

不...整数和字符串是不同类型的...虽然这fancyness可以加入时在UI表单上呈现(以字符串形式呈现) – Nogard 2013-02-27 15:50:10

+0

如果我没有弄错,你不打开任何连接? – Derek 2013-02-27 16:07:17

回答

0

你列intValueInt32所以你不能将其设置为string价值,这是你正在尝试在foreach循环做。

当您设置DataRow row时,您不需要int r = 0;变量来访问foreach循环内的行,因为它为您提供当前行。

如果您尝试将GridView上的列值设置为新的字符串值,则可以使用GridView.RowDataBound事件根据隐藏列中的值设置一列的值。

或者你可以将字符串列添加到您的DataTable和绑定到,见下图:

DataTable dt = ds.Tables[0]; 

dt.Columns.Add("TickedValue", typeof(String)); 

foreach (DataRow row in dt.Rows) 
{ 

    if (row["intValue"].ToString() == "-1") 
    { 
     row["TickedValue"] = untick + " No"; 
    } 
    else 
    { 
     row["TickedValue"] = tick + " Yes"; 
    }   
}