yogesh kumar14 Ответов: 3

Как преобразовать datarow в datatable или dataset в C#.


У меня есть одна задача - преобразовать datarow в datatable.
Например, у меня есть один datatable, который содержит 10 записей.каждый раз, когда я читаю datarow, каждая строка должна быть преобразована в datatable.

Я использовал приведенный ниже код, но он не работает.

dstable. importRow(dtrow)

Pheonyx

"это не работает" - не очень полезное утверждение.
один фрагмент строки обычно бесполезен, когда вы не совсем ясно представляете, что вы пытаетесь сделать?

Поэтому, пожалуйста, используйте функцию "улучшить вопрос" и предоставьте немного больше информации о ваших фактических целях, имея в виду, что datarow не может быть преобразован в datatable, datatable состоит из datarows.

Получаете ли вы какие-либо ошибки в строке кода, которую вы пытаетесь выполнить? Можете ли вы предоставить немного больший фрагмент кода, чтобы получить немного больше контекста для вашей проблемы? И можете ли вы объяснить свою целевую цель так, как это может быть, что то, чего вы пытаетесь достичь, не было понято точно.

JoCodes

Разместите соответствующий код .А также сделайте свой вопрос более ясным. "каждая строка преобразуется в datatable"?Можете ли вы сказать, чего вы пытаетесь достичь

3 Ответов

Рейтинг:
1

cigwork

/// <summary>
/// Take each row from a source table and copy it to
/// a separate table. Return the new tables so created in a dataset.
/// </summary>
/// <param name="source">A datatable</param>
/// <returns></returns>
private DataSet SplitRows(DataTable source)
{

  DataSet ds = new DataSet();

  foreach(DataRow r in source.Rows) 
  {
    DataTable copy = source.Clone();
    copy.LoadDataRow(r.ItemArray, true);
    ds.Tables.Add(copy);
  }

  return ds;

}


Рейтинг:
1

Vincent Maverick Durano

Прежде чем делать то, что вы пытаетесь сделать, вы должны знать разницу между ними. Набор данных содержит таблицы данных и не содержит фактических данных. Datatable содержит данные, которые в основном содержат потоки данных.

Сказав это, и чтобы ответить на ваш вопрос, вы не можете скрыть DataRow в DataTable или DataSet. Однако вы можете добавить потоки данных в свой DataTable. Вот небольшой пример, как добавить datarow используется для нового объекта DataTable:

using System;
using System.Data;

namespace WebFormDemo
{
    public partial class DataTable : System.Web.UI.Page
    {

        private DataTable CreateTable() {
            //this is just for demo. 
            //You may have to fill your datatable with data from database in real scenario

            DataTable dt = new DataTable();
            DataRow dr = null;

            //define the columns
            dt.Columns.Add(new DataColumn("ID", typeof(int)));
            dt.Columns.Add(new DataColumn("FirstName", typeof(string)));
            dt.Columns.Add(new DataColumn("LastName", typeof(string)));

            //create new row
            dr = dt.NewRow();
            //add values to each rows
            dr["ID"] = 1;
            dr["FirstName"] = "Vincent";
            dr["LastName"] = "Durano";
            //add the row to DataTable
            dt.Rows.Add(dr);

            //add new row
            dr = dt.NewRow();
            //add values to each rows
            dr["ID"] = 2;
            dr["FirstName"] = "Vianne";
            dr["LastName"] = "Durano";
            //add the row to DataTable
            dt.Rows.Add(dr);

            //add new row
            dr = dt.NewRow();
            //add values to each rows
            dr["ID"] = 3;
            dr["FirstName"] = "Slash";
            dr["LastName"] = "TheMan";
            //add the row to DataTable
            dt.Rows.Add(dr);

            return dt;
        }

        private void FilterData(string filterValue) {
            DataTable dt = CreateTable(); //returns 3 rows
            DataTable dtTemp = CreateTable().Clone(); //copy the schema structure
            DataRow[] findRow = dt.Select(string.Format("LastName='{0}'",filterValue));

            foreach (DataRow row in findRow) {
                AddToTempTable(dtTemp, row);
            }

            //print the result
            foreach (DataRow row in dtTemp.Rows) {
                Response.Write(string.Format("Name: {0} {1} <br />", row["FirstName"],row["LastName"]));
            }

        }

        private DataTable AddToTempTable(DataTable source, DataRow row) {
            DataRow newRow = source.NewRow();
            newRow[0] = row[0]; //ID
            newRow[1] = row[1]; //FirstName
            newRow[2] = row[2]; //LastName
            source.Rows.Add(newRow);

            return source;
        }
        protected void Page_Load(object sender, EventArgs e) {
            if (!IsPostBack)
                FilterData("Durano");
        }
    }
}


Это приведет к следующему выводу на странице:

Имя: Винсент Дюрано
Имя: Вианна Дюрано


Richard Deeming

Этот вопрос был задан и на него был дан ответ три года назад. Он появился в списке "последние" только потому, что кто-то решил опубликовать копию решения 1 как "новое" решение.

Vincent Maverick Durano

Должно быть, я ослеп, раз не вижу этого. Я не хотел возвращать старые нити к недавним.

Спасибо, что дали мне знать. Для меня это большая трата времени, чтобы дать такой ответ.

Рейтинг:
1

Member 12981553

Си "тиэнэс" Соло ООН Строкаданных Комо Оригена г desdeas insertarlo в организации объект DataTable vacío, simplemente podrías Хаджер Эсто:

yourEmptyDataTable= yourDataRowSource.Table.Clone();
yourEmptyDataTable.ImportRow(yourDataRowSource);


OriginalGriff

Хотя я аплодирую вашему стремлению помогать людям, это хорошая идея-придерживаться новых вопросов, а не 3-летних, решенных.
Ответы на старые вопросы-особенно на неанглийском языке-можно рассматривать как охоту за репостами, которая является формой злоупотребления сайтом. Чем больше триггеров счастливых среди нас, тем быстрее начнется процесс запрета вам доступа на сайт, если вы не будете осторожны. Придерживайтесь новых вопросов и используйте английский язык (Google Translate может помочь здесь), и все будет в порядке.