0

我是 MVC 的新手,我正在尝试从存储过程响应构建一个 DataTable 并将其传递回我的视图。对于行,我构建了一个以逗号分隔的字符串,其中包含单元格值。

我遇到的问题是字符串没有被逗号解析,实际上它将整个字符串传递到每行的第一个单元格中。

建立由每列的单个值组成的行的正确方法是什么?列数、它们的名称和返回的记录数量都是可变的。

    public ActionResult dataSet(string table, string key, string search)
    {
        SqlDataReader rdr = null;
        SqlConnection con = new SqlConnection("Connection stuff");
        SqlCommand cmd = new SqlCommand();
        cmd = new SqlCommand("dbo.USP_getDataSet", con);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@key", key);
        cmd.Parameters.AddWithValue("@table", table);
        cmd.Parameters.AddWithValue("@search", search);
        con.Open();

        DataTable theTable = new DataTable();
        try
        {
            rdr = cmd.ExecuteReader();
            while (rdr.Read())
            {
                int count = rdr.FieldCount;
                string rowString = "";
                int intRows = theTable.Columns.Count;
                //Build columns on first pass through
                if (intRows == 0){
                    for (int i = 0; i < count; i++){
                        theTable.Columns.Add(Convert.ToString(rdr.GetName(i).TrimEnd()), typeof(string));                    
                    }
                }

                //Grab all values for each column
                for (int i = 0; i < count; i++){                        
                    rowString += '\"' + (Convert.ToString(rdr.GetValue(i)).TrimEnd()) + '\"' + ", ";                        
                }

                //Remove trailing delimiter
                string finishedRow = rowString.Substring(0, rowString.Length - 2);

                //Add the full row for each time through reader
                theTable.Rows.Add(finishedRow);
           } 
        }

        finally
        {
            if (rdr != null)
            { rdr.Close(); }
            if (con != null)
            { con.Close(); }
        }
        return View(theTable);
    }
4

1 回答 1

2

根据DataRowCollection.Add(params Object[] values)方法的文档,传入的每个值都将填充每个单元格。由于您传递的是单个值,因此它是单元格的值。

你可能想要:

var cells = new object[count];
for (int i = 0; i < count; i++)
{                        
  cells[i] = rdr.GetString(i).Trim() + "\"
}
theTable.Rows.Add(cells)
于 2013-09-16T22:53:57.803 回答