返回修改后的DataSet

时间:2013-02-27 15:46:47

标签: c# asp.net gridview asmx webmethod

我有以下WebMethod -

[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;

    }

尝试将intValue 1转换为√ Yes-1x No时,这种情况正在中断。

错误是 -

  

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

这可能吗?

1 个答案:

答案 0 :(得分:0)

您的专栏intValueInt32,因此您无法将其设置为string值,这是您在foreach循环中尝试执行的操作。

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

如果您尝试将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";
    }        
}