Alex2 101 Ответов: 2

Как динамически изменить тип данных datacolumn в ASP.NET с#?


Я создаю datatable динамически. Я добавляю тип данных и имя столбца из БД, но я получаю проблему "не могу изменить тип данных столбца, как только столбец содержит данные" при извлечении Int32 /double типа данных из БД при динамическом создании таблицы данных

Что я уже пробовал:

StreamReader Rep001Stream = new StreamReader(filePath);
try
{
  if (dsStdRep001SchemaDetails.Tables[0].Rows.Count > 0)
  {
    string[] words;
    DataRow row=null;
    try
    {
      string Rep001Record = "";
      while (!Rep001Stream.EndOfStream)
      {
        Rep001Record = Rep001Stream.ReadLine();
        for (int i = 0; i < dsStdRep001SchemaDetails.Tables[0].Rows.Count; i++)
        {
          int temp = i;
          System.Data.DataTable dtTemp1 = new System.Data.DataTable();
          dtTemp1.Columns.Add(new DataColumn("Column" + i));
          dtRep001.Columns[i].DataType = System.Type.GetType("System." + dsStdRep001SchemaDetails.Tables[0].Rows[i]["ColumnType"].ToString());
          dtRep001.Columns[i].ColumnName = dsStdRep001SchemaDetails.Tables[0].Rows[i]["ColumnName"].ToString();
          string ColumnId = dtRep001.Columns[i].ColumnName.ToString();
          words = Rep001Record.Split(',');
          if (words[0] != STR_RPT_END)
          {
            if (i == 0)
            {
              row = dtRep001.NewRow();
              dtRep001.Rows.Add(row);
            }
            // row[ColumnId] = words[i].Trim();
          }
        }
      }
    }
    catch (Exception ex)
    {
    }
  }
  Rep001Stream.Close();
  Rep001Stream.Dispose();
}
catch (Exception ex)
{
  objFileDetails.Status = "E";
  objFileDetails.ErrorDescription = ex.Message;
  bool Succeeded = SaveFile(objFileDetails);
  Common.WriteLogService("Error : " + ex.Message, ex.StackTrace, true);
  Rep001Stream.Close();
  Rep001Stream.Dispose();
}

2 Ответов

Рейтинг:
2

Sandeep1003

Определите здесь сам тип данных

Temp1.Columns.Add(new DataColumn("Column" + i));


подобный этому

Temp1.Columns.Add(new DataColumn("Column" + i), typeof(int));


Рейтинг:
0

kambingkoh

Это дубликат Как динамически изменить тип данных на динамическую таблицу данных в ASP.NET с C#?[^]

В любом случае,

Try CAST all your data to a single datatype first when extracting from database.

Example: <pre>select cast(columnName as int) columnName from table


Ссылка: c# - Как изменить тип данных столбца DataColumn в DataTable? - переполнение стека[^]