#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 (объекты передачи данных).