Невозможно отобразить набор данных в приложении WinForm

#c# #winforms #web-services #dataset

#c# #winforms #веб-сервисы #набор данных

Вопрос:

Моя проблема в том, что я не могу просмотреть набор данных в форме Windows на стороне клиента. Я использую метод SetDataBinding, но я получаю сообщение об ошибке, в котором говорится, что:

Ошибка: "Systems.Windows.Forms.DataGridView" doesn't contain any defination for SetDataBinding and no extension method accepting first type of argument"

Вот код веб-службы, который возвращает набор данных:

   public class Service1 : System.Web.Services.WebService
  {
    [WebMethod]
    public DataSet getdata(String rollno)
    {
        try
        {
            using (SqlConnection myConnection = new SqlConnection(@"Data Source=.SQLEXPRESS;Initial Catalog=student;User ID=sa;Password=123"))
            {
                string select = "select * from checkrecord where rollno=@rollno";
                SqlDataAdapter da = new SqlDataAdapter(select, myConnection);
                DataSet ds = new DataSet();
                da.Fill(ds, "students");
                return (ds);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            return null;                
        }

    }
  

Код на стороне клиента, который связывает данные:

       using System.Drawing;
      using System.Linq;
      using System.Text;
      using System.Windows.Forms;
      using System.Web.Services;
      using System.Web.Services.Protocols;
      using WindowsFormsApplication1.dataset1;

     //dataset1 is my web reference name
    namespace WindowsFormsApplication1
    {
      public partial class Form1 : Form
      { 
          public Form1()
          {
              InitializeComponent();
          }
          private void calldatagrid_Click(object sender, EventArgs e)
          {
             Service1 MyService = new Service1();
            // Call the GetData method in the Web Service
            DataSet ds = MyService.getdata("abc");
            // Bind the DataSet to the Grid
            datagrid.SetDataBinding=ds;
          }
      }
   }
  

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

1. К вашему сведению, язык называется «C #», а не «C#.NET «.

2. извините за ошибку, буду помнить об этом в будущем .. спасибо 🙂

Ответ №1:

измените datagrid.SetDataBinding=ds; строка в datagrid.Источник данных = ds.Таблица [0];

используйте приведенный ниже фрагмент кода:

  Service1 MyService = new Service1();
 // Call the GetData method in the Web Service
  DataSet ds = MyService.getdata("abc");
 // Bind the DataSet to the Grid
  datagrid.DataSource=ds.Table[0];
  

другое изменение:

в вашем веб-сервисе измените «select * from checkrecord where rollno=@rollno«; эту строку на «select * from checkrecord where rollno= ‘» rollno «‘«;

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

1. Да, я пробовал это, я получил эту ошибку: «Systems.Data.DataSet» не содержит никакого определения для таблицы и никакого метода расширения, принимающего первый тип аргумента»

2. ок .. затем поставьте точку останова в строке DataSet ds = MyService.getdata («abc»); и проверьте, получаете ли вы таблицу или нет? если нет, то это означает, что ваш веб-сервис не возвращает ни одной таблицы внутри dataset .. это означает, что ваш запрос не имеет выходных данных.. Запустите этот запрос в sql и посмотрите, какой результат он выдает.

3. @Parth_90: Я думаю, что нашел проблему .. проверьте мой ответ. Я отредактировал.

4. Я видел редактирование обоих для SQL-запроса… Я снова установил требуемую точку останова в строке, которую вы упомянули .. там написано, что ds содержит null 🙁

5. можете ли вы проверить, что в вашем запросе указано, какие выходные данные выдаются в sql?

Ответ №2:

SetDataBinding определен в DataGrid, а не в DataGridView (несвязанный), и является методом, а не свойством, и требует двух параметров. Попробуйте вместо этого:

 datagrid.DataSource = ds;
  

И необязательно:

 datagrid.DataMember = "TableName";
  

В качестве отступления… Наборы данных — ужасный, ужасный выбор для веб-сервисов.

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

1. Я попробовал это, моя ошибка исчезла, и я получил форму Windows, отображаемую с моим DataGridView и командной кнопкой, но когда я нажал кнопку, я не смог увидеть данные в GridView

2. @parth вы установили элемент данных? На самом деле, настройка источника данных в таблицу также может быть проще

3. 1 для Data-sets are a horrible horrible choice for web-services

4. @MarcGravell : Я также пытался добавить элемент данных. Все еще не удается увидеть набор данных в моем DataGridView. Есть другой лучший способ сделать это?

5. Лучший способ — не возвращать набор данных. Вместо этого возвращайте коллекции классов POCO (объекты передачи данных).