0

私は次のものを持っています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 です。

これは可能ですか?

4

1 に答える 1

0

あなたの列intValueはそうなので、あなたはそれをあなたがあなたのループでやろうとしていることでInt32ある値に設定することができません。stringforeach

設定しているときにループint r = 0;内の行にアクセスするための変数は必要ありません。これにより、現在の行が得られます。foreachDataRow row

GridViewの列の値を新しい文字列値に設定しようとしている場合は、GridView.RowDataBoundイベントを使用して、非表示の列の値に基づいて1つの列の値を設定できます。

または、文字列列を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";
    }        
}
于 2013-02-27T15:54:46.377 に答える