如何在C#asp.net中将字符串数据转换为数据表?

时间:2014-03-06 14:58:21

标签: c# asp.net

到目前为止,我已尝试将DataTable转换为String,如下所示: -

public static string convertDataTableToString(DataTable dataTable)
    {
        string data = string.Empty;
        int rowsCount = dataTable.Rows.Count;
        for (int i = 0; i < rowsCount; i++)
        {
            DataRow row = dataTable.Rows[i];
            int columnsCount = dataTable.Columns.Count;
            for (int j = 0; j < columnsCount; j++)
            {
                data += dataTable.Columns[j].ColumnName + "~" + row[j];
                if (j == columnsCount - 1)
                {
                    if (i != (rowsCount - 1))
                        data += "$";
                }
                else
                    data += "|";
            }
        }
        return data;
    }

现在我想再次将返回的字符串转换为DataTable

1 个答案:

答案 0 :(得分:3)

您可以使用String.Split将字符串分解为行和单元格。如果列设置始终相同(应该是这样),那么您可以在第一次迭代中通过单元格添加列。

这是一个简单的例子:

public static DataTable convertStringToDataTable(string data)
{
    DataTable dataTable = new DataTable();
    bool columnsAdded = false;
    foreach(string row in data.Split('$'))
    {
        DataRow dataRow = dataTable.NewRow();
        foreach(string cell in row.Split('|'))
        {
            string[] keyValue = cell.Split('~');
            if (!columnsAdded)
            {
                DataColumn dataColumn = new DataColumn(keyValue[0]);
                dataTable.Columns.Add(dataColumn);
            }
            dataRow[keyValue[0]] = keyValue[1];
        }
        columnsAdded = true;
        dataTable.Rows.Add(dataRow);
    }
    return dataTable;
}

或者你可以在循环之前获得所有列的列表,但这种方式可能更容易实现。