PDA

View Full Version : سوال: چرا مقدار بازگشتي datatable از سمت وب سرويس، در ديتاسورس gridview در سمت كلاينت قرار نميگيرد؟



bamzi software
شنبه 01 مرداد 1390, 16:49 عصر
سلام دوستان

من در وب سرويس متدي نوشتم كه نتيجه به صورت چند ركورد هست و به همين خاطر اون رو در datatable قرار دادم.

در قسمت كلاينت كه اين متد رو فراخواني ميكنم ، براي قرار دادن در gridview با خطا روبرو ميشم.

متد وب سرويس اين هست:




[WebMethod]
public DataTable GetTest(string Syml, DateTime DTE1, DateTime DTE2)
{


string sql = " select Symbol,DateTime,H5 from FX_Forecast where Symbol='" + Syml + "' and DateTime BETWEEN '" + DTE1 + "'AND'" + DTE2 + "'";

OpenDb();
cmd = new SqlCommand(sql, con);
dr = cmd.ExecuteReader();

DataTable dt = new DataTable("DTB");
dt.Columns.Add("Symbl", typeof(string));
dt.Columns.Add("DT", typeof(DateTime));
dt.Columns.Add("H5", typeof(string));

while (dr.Read())
{
DataRow row = dt.NewRow();
row["Symbl"] = dr["Symbol"];
row["DT"] = dr["DateTime"];
row["H5"] = dr["H5"];
dt.Rows.Add(row);
}
return dt;

con.Close();

}


و در سمت كلاينت هم با زدن دكمه متد وب سرويس فراخواني ميشود:



protected void Button1_Click(object sender, EventArgs e)
{
localhost.Service datatb = new localhost.Service();
GridView1.DataSource = datatb.GetTest();
GridView1.DataBind();

}


اما در خط مشخص شده با رنگ قرمز با چنين خطايي مواجه ميشم:


Data source is an invalid type. It must be either an IListSource, IEnumerable, or IDataSource.

مشكل از كجاست؟ بايد در سمت كلاينت نوع مقدار بازگشتي را تغيير دهم؟

میلاد رئیسی
جمعه 29 اردیبهشت 1391, 12:12 عصر
دوست عزیز باید dataset رو برگردونی منم این مشکل رو داشتم که آخرش با dataset مشکلمو حل کردم. دلیلش اینه که DataTale قابلیت Serialize شدن رو نداره.
از DataSet استفاده کن.

alonemm
یک شنبه 21 خرداد 1391, 13:58 عصر
باسلام:

بهتره برای ارسال منبع داده توسط وب سرویس ها از ساختار استاندارد XML استفاده کنید.