преобразовать список (из веб-службы) в datatable c#

#c# #list #wcf #datatable #listcontrol

#c# #Список #wcf #datatable #listcontrol

Вопрос:

Я вызываю службу WCF, которая выдает мне список клиентов с указанными именами полей в BAL. Я создал метод ToDataTable , как указано на многих форумах (это может быть неправильно для данного экземпляра). Я использую его для преобразования списка в datatable, но есть проблема, с которой я сталкиваюсь. Ошибка гласит: «Невозможно неявно преобразовать тип «System.Data.DataTable в mHotRes.DesktopPresentation.ListFrm.ListType’.

Вот мой код для привязки данных:

 private void BindData()
    {
        try
        {
            switch (_ListType)
            {
                case ListType.Customers:
                    IHotRes res = new MHotServiceProvider().Service;
                     List<Customer> customer = res.CustomerSaveDataList();

                    _ListType = ToDataTable(customer); //the problem occurs here
                    break;
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
  

Вот код для ToDataTable метода:

 public static DataTable ToDataTable<T>(List<T> items)
    {
        DataTable dataTable = new DataTable(typeof(T).Name);

        //Get all the properties
        PropertyInfo[] Props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
        foreach (PropertyInfo prop in Props)
        {
            //Setting column names as Property names
            dataTable.Columns.Add(prop.Name);
        }
        foreach (T item in items)
        {
            var values = new object[Props.Length];
            for (int i = 0; i < Props.Length; i  )
            {
                //inserting property values to datatable rows
                values[i] = Props[i].GetValue(item, null);
            }
            dataTable.Rows.Add(values);
        }
        //put a breakpoint here and check datatable
        return dataTable;
    }
  

Если потребуются дополнительные примеры кода, дайте мне знать.

Ответ №1:

Ваш код отражения в DataTable работает правильно:

 _ListType = ToDataTable(customer); //the problem occurs here
  

Проблема в том, что _ListType у них другой тип DataTable .

Вы должны изменить строку на

 DataTable tbl = ToDataTable(customer);//Your method returns DataTable
  

Комментарии:

1. Спасибо, похоже, пока это работает. Я попытаюсь отобразить данные в datagridview.

2. Когда я пытаюсь инициализировать его при загрузке формы, он говорит Object Reference not set to an instance of an object ? не могли бы вы помочь мне в этом, пожалуйста?

3. @UZIERSKI это другой вопрос, вы можете задать их в новом. В этом случае может помочь больше людей. Это исключение происходит, потому что некоторые из ваших значений равны null. Отладьте его и посмотрите, какой именно.