PDA

View Full Version : object Data Source



Milad.a.p
یک شنبه 23 بهمن 1384, 00:19 صبح
سلام
من یک کلاس دارم که یک متد به این صورت توش دارم

public DataRow GetRandomBook()
{
using (SqlConnection cnn = new SqlConnection(ConfigurationManager.ConnectionStrin gs["DBCS"].ConnectionString))
{
using (SqlCommand cmd = new SqlCommand("GetRandomBook",cnn))
{
cmd.CommandType = CommandType.StoredProcedure;
using (DataTable tbl = new DataTable())
{
tbl.Columns.Add("ID", typeof(Int32));
tbl.Columns.Add("Title", typeof(String));
tbl.Columns.Add("CategoryID", typeof(Int32));
tbl.Columns.Add("Category", typeof(String));
tbl.Columns.Add("Publisher", typeof(String));
tbl.Columns.Add("Link", typeof(String));
tbl.Columns.Add("Picture", typeof(String));
DataRow dr = tbl.NewRow();
try
{
cnn.Open();
using (SqlDataReader reader = cmd.ExecuteReader())
{
reader.Read();
dr["ID"] = reader["ID"];
dr["Title"] = reader["Title"];
dr["CategoryID"] = reader["CategoryID"];
dr["Category"] = reader["Category"];
dr["Publisher"] = reader["Publisher"];
dr["Link"] = reader["Link"];
dr["Picture"] = reader["Picture"];
dr.AcceptChanges();
reader.Close();
cnn.Close();
}
}
catch (Exception err)
{
if (cnn.State != ConnectionState.Closed)
{
cnn.Close();
return null;
}
}
return dr;
}
}
}
}
حالا وقتی میخوام با استفاده از Object data source این اطلاعات رو نمایش بدم کا نمیکنه.
نمیدوم باید از همون متد Eval استفاده کنم یا چی؟
در ضمن از نظر StoredProcdure اشکالی نداره قبلا همین کار رو به SqlDatasource میکردم.

ممنون

Behrouz_Rad
یک شنبه 23 بهمن 1384, 21:38 عصر
جزئیات بیشتری بفرمایید.
کدهای ObjectDataSource در فایل aspx و نحوه ی بایند به کنترل مورد نظر (GridView، DetailsView یا ....) رو لطف بفرمایید.
موفق باشید.

Milad.a.p
یک شنبه 23 بهمن 1384, 22:27 عصر
بله حتما

کد فایل ASCX بنده به این صورته

<asp:FormView ID="FormView1" runat="server" DataSourceID="ObjectDataSource1">
<ItemTemplate>
<table style="width: 200px">
<tr>
<td align="center">
<a href='Books.aspx?BookID=<%# Eval("ID") %>'>
<asp:Image ID="Image1" runat="server" ImageUrl='<%# Eval("Picture", "~/Images/{0}") %>'/></a>
</td>
</tr>
<tr>
<td>
<asp:Label ID="Label1" runat="server" Text="Title : "></asp:Label>
<a target="_blank" href='<%# Eval("Link") %>'>
<asp:Label ID="Label2" runat="server" Text='<%# Eval("Title")%>'></asp:Label></a></td>
</tr>
<tr>
<td>
<asp:Label ID="Label3" runat="server" Text="Category : "></asp:Label>
<asp:Label ID="Label4" runat="server" Text='<%# Eval("Category") %>'></asp:Label></td>
</tr>
<tr>
<td>
<asp:Label ID="Label5" runat="server" Text="Publisher : "></asp:Label>
<asp:Label ID="Label6" runat="server" Text='<%# Eval("Publisher") %>'></asp:Label></td>
</tr>
<tr>
<td>
<a href='Books.aspx?CategoryID=<%# Eval("CategoryID") %>'>
<asp:Label ID="Label7" runat="server" Text="View More>>"></asp:Label></a></td>
</tr>
</table>
</ItemTemplate>
</asp:FormView>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetRandomBook"
TypeName="Books.Book"></asp:ObjectDataSource>

البته همون طور که قبلا گفتم این کدها با SQLDataSource کار میکردن.مطمئنا در نحوه ی بایند کردن اشکال دارم تو MSDN تا هرجای دیگه هم که گشتم تمام کد ها به GridView تا Repeater بایند شده بودن و کد موجود در کلاس اونها نوع برگشتیش از نوع گنریک بود یا دیتاست یا دیتا تیبل

ممنون

Milad.a.p
دوشنبه 24 بهمن 1384, 00:16 صبح
فکر کنم باید نوع برگشتی متد رو تغییر بدم.به این دلیل که یک کتاب به صورت رندم انتخاب میشه از نوع DataRow استفاده کردم.
نظر شما چیه؟

Milad.a.p
دوشنبه 24 بهمن 1384, 11:30 صبح
احتمالا به این علت کار نمیکنه...
چون متد Eval به دنبال یک خاصیت مثلا ID در شی برگشتی میگرده و چون ID یکی از اعضای کالکشن Columns از نوع Data Column هستش به این دلیل چیزی نشون نمیده.درسته؟
اگه اینطوره که فکر میکنم هست پس از چه روشی برای بایند کردن استفاده کنم که جواب بگیرم؟

Behrouz_Rad
دوشنبه 24 بهمن 1384, 17:20 عصر
اشکالی در کدهای فوق ندیدم!
متاسفانه بنا به دلایلی، فعلا دسترسی به دات نت ندارم! اما در نگاه اول که مشکلی رو ندیدم!
اگر به نتیجه ای رسیدید، بنده را هم بی نصیب نگذارید.
متشکرم.
موفق باشید.