我是MVC的新手,我正在尝试从存储过程响应构建一个DataTable并将其传递回我的View。对于行,我构建了一个逗号分隔的字符串,其中包含单元格值。
我遇到的问题是字符串没有被逗号解析,实际上它将整个字符串传递到每行的第一个单元格中。
构建由每列的各个值组成的行的正确方法是什么?列的数量,它们的名称和返回的记录数都是可变的。
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);
}
答案 0 :(得分: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)