ورود

View Full Version : آموزش: مستر دیتیل - انتخاب از گریدویو و نمایش در صفحه دیگر (همراه با مثال خبر)



mRizvandi
شنبه 23 فروردین 1393, 23:01 عصر
سلام به همه دوستان

توی این پست قصد دارم نحوه مستر-دیتیل رو خیلی کوتاه شرح بدم.
طراحی مستر-دیتیل معمولا از یک گریدویو و یک فرم ویو بهره میگرد. یکی برای نمایش لیست (گرید ویو یا کنترلهای مشابه) و یکی برای نمایش جزییات رکورد (فرم ویو یا کنترلهای مشابه)
در اینجا ما از گریدویو و فرم ویو استفاده کردیم.
ابتدا گرید با لیستی از آیتمهای قرار گرفته در جدول News پر می شود. سپس با انتخاب سطر گرید، جزییات خبر در یک صفحه دیگر نمایش داده می شود.

توضیحات کد:
پروژه ای که به همراه این آموزش ارائه شده، دارای دو صفحه Default.aspx و News.aspx است.
در صفحه Default.aspx دو گرید قرار دارد.
گرید اول برای حالتی است که کاربر روی سطر گرید کلیک می کند و با استفاده از رویداد SelectedIndexChange کاربر به صفحه نمایش جزییات خبر هدایت می شود.
گرید دوم برای حالتی است که عنوان خبر به صفحه نمایش خبر پیوند داده شده، (لینک نمایش خبر). کاربر با کلیک روی پیوند نمایش داده شده، به صفحه نمایش جزییات خبر هدایت می شود.

در صفحه نمایش جزییات خبر، یک فرم ویو قرار دارد که با استفاده از پارامتر QueryString ارسال شده به صفحه، جزییات خبر را نمایش می دهد.


protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
string newsQuery = string.Empty;
string newsID = Request.QueryString["ID"];
int newsIDValue = 0;
if (!string.IsNullOrEmpty(newsID))
{
int.TryParse(newsID, out newsIDValue);
newsQuery = "SELECT * FROM News WHERE NewsID=" + newsIDValue + ";";
System.Data.DataTable newsDetail = new System.Data.DataTable();
System.Data.SqlClient.SqlDataAdapter newsDetailAdapter = new System.Data.SqlClient.SqlDataAdapter(newsQuery, sqlConnection);
newsDetailAdapter.Fill(newsDetail);
sqlConnection.Close();
fvNewsDetail.DataSource = newsDetail;
fvNewsDetail.DataBind();
}
else
{
//ID is not valid, go to default page
Response.Redirect("~");
}
}
}



توضیح کدهای صفحه نمایش جزییات خبر:
ابتدا پارامتر ارسال شده در صفحه را با استفاده از Request.QueryString["ID"] خوانده می شود.
زمانی که از QueryString استفاده می کنید، باید دقت کنید که ممکن است صفحه بدون پارامتر باز شود، یا مقدار ID ارسال شده، نامعتبر باشد، یا وجود نداشته باشد. پس کدهای لازم برای هر یک از حالت فوق را باید بنویسید، تا امنیت اجرایی صفحه تان را برقرار کنید.
در این مثال اگر مقدار پارامتر ارسال نشده باشد، کاربر به صفحه اصلی هدایت می شود و اگر مقدار آن نامعتبر باشد یا در دیتابیس پیدا نشود، عکس العملی نشان نمی دهد. شما می توانید متناسب با پروژه خودتون این بخش رو مدیریت کنید.
پس از اجرای کوئری از جدول مرتبط با خبر، رکورد برگشت داده شده به فرم ویو بایند می شود و فرم ویو اطلاعات را نمایش می دهد.

امیدوارم که این نمونه بسیار ساده کمک کننده برای دوستان باشد.
موفق و پیروز باشید.

mRizvandi
دوشنبه 25 فروردین 1393, 12:48 عصر
توی این پست یک سورس در خصوص انتخاب در دیتالیست گذاشتم.
دیتالیست ابتدا به بانک متصل میشه و رکوردها رو نمایش میده. برای انتخاب و نمایش جزییات از دو روش استفاده شده:
روش اول استفاده از ItemCommand هست و روش دوم استفاده از SelectedIndexChange

در روش اول یک هایپرلینک با CommandName تعریف شده و مقدار اون Select به معنی انتخاب رکورد هست. در این حالت نیازی نیست که DataKeyField دیتالیست رو معرفی کنید و برای بدست آوردن مقدار ID خبر (مثال ارائه شده) مورد نظر از CommandArgument استفاده شده.
کافی است در رویداد ItemCommand عمل بایند کردن گریدویو-فرم ویو رو برای نمایش جزییات رکورد انتخاب شده، انجام بدید. دقت کنید که چون این دیتالیست فقط یک کامند به نام Select داشته من در کد مقدار اون رو چک نکردم. پس اگر از چند کامند استفاده می کنید حتما مقدار اون رو در رویداد مربوطه چک کنید.



<asp:DataList ID="dlNews1" runat="server" OnItemCommand="dlNews1_ItemCommand">
<ItemTemplate>
<asp:LinkButton ID="lbSelect" runat="server" CommandName="Select" CommandArgument='<%# Eval("NewsID") %>' Text='<%# Eval("NewsDate") %>' />
...



string newsQuery = "SELECT * FROM News WHERE NewsID=" + e.CommandArgument + ";";

در روش دوم که استفاده از رویداد SelectedIndexChange هست، حتما باید DataKeyField رو با فیلد کلید جدول مروبطه مقدار دهی کنید. در این مثال NewsID انتخاب شده.
سپس در رویداد مربوطه می توان با استفاده از خصوصیت SelectedValue به مقدار ID مربوطه دسترسی پیدا کرد و بر اساس آن جزییات رکورد انتخاب شده را از بانک اطلاعاتی بدست آورد.



<asp:DataList ID="dlNews2" runat="server" DataKeyField="NewsID" OnSelectedIndexChanged="dlNews2_SelectedIndexChanged">
...



string newsQuery = "SELECT * FROM News WHERE NewsID=" + dlNews2.SelectedValue + ";";

vahidbolbol
دوشنبه 25 فروردین 1393, 15:10 عصر
سلام دوست عزیز خیلی زحمت کشیدی
من این کارارو انجام دادم اما و قتی رو تیتر خبرم کلیک میکنم تا به صفحه اخبارم بره نمیره صفحه یکجورایی ریفرش میشه!!!
این کد صفحه تیترمه:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="NewsID" DataSourceID="SqlDataSource1" EnableModelValidation="True" Height="299px" Width="183px"> <Columns>
<asp:TemplateField HeaderText="titr" SortExpression="titr">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("titr") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/News.aspx" Text='<%# Eval("titr") %>'></asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>

اینم کد پیج لود همین صفحه تیترم:

using System;using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.Sql;
using System.Configuration;
public partial class _Default : System.Web.UI.Page
{
System.Data.SqlClient.SqlConnection sqlConnection = new System.Data.SqlClient.SqlConnection(@"Data Source=DELL\VAHID;Initial Catalog=Sinabartar;Integrated Security=True");
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
BindGridViews();
}
}


private void BindGridViews()
{

}
}

اینم کد صفحه خبرم که باید با جزئیات نمایش بده:

<asp:FormView ID="FormView1" runat="server" DataKeyNames="id" DataSourceID="SqlDataSource1" EnableModelValidation="True"> <EditItemTemplate>
id:
<asp:Label ID="idLabel1" runat="server" Text='<%# Eval("id") %>' />
<br />
titr:
<asp:TextBox ID="titrTextBox" runat="server" Text='<%# Bind("titr") %>' />
<br />
khabar:
<asp:TextBox ID="khabarTextBox" runat="server" Text='<%# Bind("khabar") %>' />
<br />
tarikh:
<asp:TextBox ID="tarikhTextBox" runat="server" Text='<%# Bind("tarikh") %>' />
<br />
saat:
<asp:TextBox ID="saatTextBox" runat="server" Text='<%# Bind("saat") %>' />
<br />
<asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True" CommandName="Update" Text="Update" />
&nbsp;<asp:LinkButton ID="UpdateCancelButton" runat="server" CausesValidation="False" CommandName="Cancel" Text="Cancel" />
</EditItemTemplate>
<InsertItemTemplate>
titr:
<asp:TextBox ID="titrTextBox" runat="server" Text='<%# Bind("titr") %>' />
<br />
khabar:
<asp:TextBox ID="khabarTextBox" runat="server" Text='<%# Bind("khabar") %>' />
<br />
tarikh:
<asp:TextBox ID="tarikhTextBox" runat="server" Text='<%# Bind("tarikh") %>' />
<br />
saat:
<asp:TextBox ID="saatTextBox" runat="server" Text='<%# Bind("saat") %>' />
<br />
<asp:LinkButton ID="InsertButton" runat="server" CausesValidation="True" CommandName="Insert" Text="Insert" />
&nbsp;<asp:LinkButton ID="InsertCancelButton" runat="server" CausesValidation="False" CommandName="Cancel" Text="Cancel" />
</InsertItemTemplate>
<ItemTemplate>
<br />
titr:
<asp:Label ID="titrLabel" runat="server" Text='<%# Bind("titr") %>' />
<br />
khabar:
<asp:Label ID="khabarLabel" runat="server" Text='<%# Bind("khabar") %>' />
<br />
tarikh:
<asp:Label ID="tarikhLabel" runat="server" Text='<%# Bind("tarikh") %>' />
<br />
saat:
<asp:Label ID="saatLabel" runat="server" Text='<%# Bind("saat") %>' />
<br />
</ItemTemplate>
</asp:FormView>

اینم کد پیج لود همین صفحه اخبارم:

using System.Web.UI;using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Configuration;
public partial class News : System.Web.UI.Page
{
System.Data.SqlClient.SqlConnection sqlConnection = new System.Data.SqlClient.SqlConnection(@"Data Source=DELL\VAHID;Initial Catalog=Sinabartar;Integrated Security=True");
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
string newsQuery = string.Empty;
string newsID = Request.QueryString["ID"];
int newsIDValue = 0;


if (!string.IsNullOrEmpty(newsID))
{
int.TryParse(newsID, out newsIDValue);
newsQuery = "SELECT * FROM Akhbar WHERE NewsID=" + newsIDValue + ";";


System.Data.DataTable newsDetail = new System.Data.DataTable();
System.Data.SqlClient.SqlDataAdapter newsDetailAdapter = new System.Data.SqlClient.SqlDataAdapter(newsQuery, sqlConnection);
newsDetailAdapter.Fill(newsDetail);
sqlConnection.Close();
FormView1.DataSource = newsDetail;
FormView1.DataBind();
}
else
{
//ID is not valid, go to default page
Response.Redirect("~");
}
}
}
}

بخدا موندم چیکار کنم مشکل من اینه که تازه کارم و باید این پروژه رو بدم بخاطر آبروم
تورو خدا کمکم کنید دوست عزیز

mRizvandi
دوشنبه 25 فروردین 1393, 15:24 عصر
هر چی نگاه می کنم اشکالات بیشتری می بینم!!!
1- اگر از اس کیو ال دیتا سورس استفاده کردید تمامی کدهای صفحه اول که تیتر خبرها رو توی گرید نمایش میده حذف کنید. نیازی بهشون نیست.
2- اگر فیلد کلید جدول خبرتون اسمش id است، پس DataKeyName گرید رو اصلاح کنید.
3- اگر اسم فیلد کلید جدول خبر اسمش NewsID است پس فرم ویو رو اصلاح کنید.
4- لینکی که به صفحه نمایش خبر گذاشتید صحیح نیست چون پارامتر رو پاس ندادید.
به این شکل کد گرید رو تغییر بدید و تست کنید و نتجیه رو اعلام کنید:


<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="NewsID" DataSourceID="SqlDataSource1"
EnableModelValidation="True" Height="299px" Width="183px">
<Columns>
<asp:HyperLinkField DataTextField="titr" DataNavigateUrlFields="id" DataNavigateUrlFormatString="~/News.aspx?ID={0}" />
<asp:TemplateField HeaderText="titr" SortExpression="titr">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("titr") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>

vahidbolbol
دوشنبه 25 فروردین 1393, 15:56 عصر
اشتباه زیاد دارم میدونم من طراحی وب رو دوست دارم اما تجربه ندارم واسه همین سوتی زیاد دارم شما به بزرگی خودتون ببخشید دوست عزیز مرسی
این کارو کردم اما وقتی اجرا گرفتم این خطا رو داد پیجم:

A field or property with the name 'id' was not found on the selected data source.Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Web.HttpException: A field or property with the name 'id' was not found on the selected data source.

Source Error:



An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

mRizvandi
دوشنبه 25 فروردین 1393, 16:09 عصر
خواهش می کنم، بلاخره باید از یه جایی شروع کرد. مطالعه همراه با تجربه همیشه بهترین نتیجه رو ایجاد می کنه.
بگذریم، خطایی که دارید مربوط به فیلدهای جدولتون هست. فیلدی به نام id ندارید.

okpnz1
دوشنبه 25 فروردین 1393, 18:15 عصر
سلام خسته نباشید ممنون از تاپیک خوبتون
ولی من مشکلم حل نشد
من یه دیتا لیست توی مستر پیج دارم که اون رو وصل کردم به آبجکت دیتا سورس یا حالا اسکیوال دیتا سورس
و میام از یه جدول که کد و نام گروه رو توش ذخیره کردم می خونم و اسم گروه رو نمایش می دم توی رویداد SelectedIndexChanged هم به گردیدویو بایندش کردم
حالا می خام با کلیک کردن روی هر یک از گروه ها بره توی صفحه پروداکت و زیر مجموعه اون گروه رو نمایش بده (مشخصات محصول + نام گروه هم در یک تیبل از دیتا بیس ذخیره شده)
توی صفحه پروداکت یه گریدویو گذاشتم و اون رو هم وصل کردم به دیتابیس
حالا چیکار کنم؟:ناراحت: نمیشه

mRizvandi
دوشنبه 25 فروردین 1393, 18:44 عصر
سلام خسته نباشید ممنون از تاپیک خوبتون
ولی من مشکلم حل نشد
من یه دیتا لیست توی مستر پیج دارم که اون رو وصل کردم به آبجکت دیتا سورس یا حالا اسکیوال دیتا سورس
و میام از یه جدول که کد و نام گروه رو توش ذخیره کردم می خونم و اسم گروه رو نمایش می دم توی رویداد SelectedIndexChanged هم به گردیدویو بایندش کردم
حالا می خام با کلیک کردن روی هر یک از گروه ها بره توی صفحه پروداکت و زیر مجموعه اون گروه رو نمایش بده (مشخصات محصول + نام گروه هم در یک تیبل از دیتا بیس ذخیره شده)
توی صفحه پروداکت یه گریدویو گذاشتم و اون رو هم وصل کردم به دیتابیس
حالا چیکار کنم؟:ناراحت: نمیشه

اگر من درست متوجه شده باشم: شما یک دیتالیست دارید که داره لیست گروه ها رو نمایش میده.
در همون صفحه یک گریدویو هم دارید که داره محصولات داخل یک گروه رو نمایش میده.
تا اینجا هم همه چی درسته و با بایند کردن گریدویو در رویداد SelctedIndexChanged دارید لیست محصولات در یک گروه رو نمایش می دید.
حالا مونده قسمت آخر که نمایش جزییات یک محصول هست. محصولی که در گرید ویو قرار داره و شما می خواهید اون رو در یک صفحه دیگه نمایش بدید:
(توی مثالی که گذاشتم، هر دو حالت وجود داره. - مثال که گرید ویو هست و خبر رو در یک صفحه دیگه نمایش میده)
شما باید گریدویویی که داره لیست محصولات رو نشون میده لینک کنید به صفحه دوم که نمایش دهنده جزییات محصول هست.
یا با استفاده از روشی که در مثال هست، کل سطر گریدویو رو لینک کنید یا اینکه یک کنترل HyperLinkField قرار بدید. (مطابق سورسی که آپلود شده)

okpnz1
دوشنبه 25 فروردین 1393, 18:56 عصر
اگر من درست متوجه شده باشم: شما یک دیتالیست دارید که داره لیست گروه ها رو نمایش میده.
در همون صفحه یک گریدویو هم دارید که داره محصولات داخل یک گروه رو نمایش میده.
تا اینجا هم همه چی درسته و با بایند کردن گریدویو در رویداد SelctedIndexChanged دارید لیست محصولات در یک گروه رو نمایش می دید.
حالا مونده قسمت آخر که نمایش جزییات یک محصول هست. محصولی که در گرید ویو قرار داره و شما می خواهید اون رو در یک صفحه دیگه نمایش بدید:
(توی مثالی که گذاشتم، هر دو حالت وجود داره. - مثال که گرید ویو هست و خبر رو در یک صفحه دیگه نمایش میده)
شما باید گریدویویی که داره لیست محصولات رو نشون میده لینک کنید به صفحه دوم که نمایش دهنده جزییات محصول هست.
یا با استفاده از روشی که در مثال هست، کل سطر گریدویو رو لینک کنید یا اینکه یک کنترل HyperLinkField قرار بدید. (مطابق سورسی که آپلود شده)
نه فک کنم بد توضیح دادم
دیتا لیستی که گروه ها رو نمایش میده داخل مسترپیج قرار داده
ولی گرید ویویی که محصولاترو نمایش میده داخل یک صفحه دیگه مثلا x.aspx هستش مشکلی توی نمایش جزئیات ندارم قبلا توی سایت (http://soltaniehrezvan.ir)
(پروژه کارشناسیم) جزئیات رو کار کردم این دومین سایتمه ممنون می شم راهنماییم کنید

mRizvandi
دوشنبه 25 فروردین 1393, 19:25 عصر
اگر این دیتالیست نقش منو رو بازی میکنه می تونید اون رو فقط در همین صفحه نمایش بدید. چون اتصال اون به گرید در این حالت کار جالبی نیست.
در این حالت شما باید در Page_Load صفحه ای که گرید در اون هست مقدار انتخاب شده در دیتالیست رو بدست بیارید. برای این منظور هم می تونید از خصوصیت Page.Master استفاده کنید. به شبه کد زیر توجه کنید:


MyMasterPageName master = (MyMasterPageName)Page.Master;
string groupId = ((DataList)master.FindControl("DataListForProductGroup")).SelectedValue;
"Select Product from table Where GroupID = groupID"
Bind The GridView

okpnz1
دوشنبه 25 فروردین 1393, 23:20 عصر
شرطش درست عمل نمی کنه میره به صفحه که گریدویو توش هست ولی توی گرید همه محصولاتو نمایش میده بدون فیلتر کردن
یه سوال توی کد بالا roup???? چیه؟

mRizvandi
دوشنبه 25 فروردین 1393, 23:26 عصر
شرطش درست عمل نمی کنه میره به صفحه که گریدویو توش هست ولی توی گرید همه محصولاتو نمایش میده بدون فیلتر کردن
یه سوال توی کد بالا roup???? چیه؟

من فرض رو بر این گذاشتم که گروه محصولات یک کلید اصلی داره به نام groupID که البته در شبه کد اومده، یعنی شما باید مطابق کد خودتون اون رو تغییر بدید.

خب کدی که باهاش گرید رو بایند کردین یا اگر کوئری هست، اون مساله داره، کدش رو اینجا بذارید تا بشه مساله رو پیدا کرد.

okpnz1
دوشنبه 25 فروردین 1393, 23:56 عصر
SqlConnection conn = new SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=***;Integrated Security=True");

protected void Page_Load(object sender, EventArgs e)
{

Mastercar master = (Mastercar)Page.Master;
object NameG = ((DataList)master.FindControl("DataList1")).SelectedValue;

string sqlQuery = "Select * from tbl_c Where codG = codG";
BindGridViews();
}
private void BindGridViews()
{
System.Data.DataTable newsTable = new System.Data.DataTable();
string sqlQuery = "Select * from tbl_c Where codG = codG";

try
{
System.Data.SqlClient.SqlDataAdapter newsAdapter = new System.Data.SqlClient.SqlDataAdapter(sqlQuery, conn);
conn.Open();
newsAdapter.Fill(newsTable);
conn.Close();

GridView2.DataSource = newsTable;
GridView2.DataBind();
}
catch (Exception ex)
{

این کد صفحه محصولات


این کد دیتا بیس

<asp:DataList ID="DataList1" runat="server" DataKeyField="codG"
CaptionAlign="Right" DataSourceID="ObjectDataSource1" >
<ItemTemplate>
<i>
<a href='g.aspx?Name=<%#Eval("codG")%>'>
<asp:Label ID="NewsTitleLabel" runat="server" Text='<%# Eval("codG") %>' Font-Underline="false" BorderStyle="None" />
</a>
</i>
</ItemTemplate>
</asp:DataList>
</div></div> <div class="col_allw140_bottom">
</div>
<br class="spacer" />
</div><asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetData"
TypeName="tGroupsTableAdapters.tGroupsTableAdapter">
<DeleteParameters>
<asp:Parameter Name="codG" Type="Int32" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="codG" Type="Int32" />
<asp:Parameter Name="NameG" Type="String" />
</InsertParameters>
<UpdateParameters>
<asp:Parameter Name="NameG" Type="String" />
<asp:Parameter Name="codG" Type="Int32" />
</UpdateParameters>
</asp:ObjectDataSource>
ممنون

vahidbolbol
سه شنبه 26 فروردین 1393, 00:15 صبح
فیلد id من تو اسکیول سرورم تو جدول اخبار دارم اما بازم همین خطا!!!
ببخشید فیلد id هم باید تو منو تیترم باشه؟چون من منوم فقط فیلد تیترو گذاشتم به نظرتون ربطی داره؟

mRizvandi
سه شنبه 26 فروردین 1393, 00:25 صبح
کد سی شارپی که گذاشتید نشون میده که دارید از روش SelectedIndexChanged استفاده می کنید.
اما کدی که برای ساخت دیتالیست دارید، مغایر با سناریویی است که قبلا عنوان کردید.
اگر می خواهید از روش لینک دادن استفاده کنید باید مقدار پارامتر کوئری استرینگی که به صفحه ارسال میشه رو بدست بیارید و اون رو در رشته کوئری اس کیو ال استفاده کنید. (به اولین پست همین تاپیک مراجعه کنید.)


--
اگر همون سناریوی قبلی برقراره پس از این متن رو بخونید:

خطی که در Page_Load دارید رشته کوئری رو میسازید باید اصلاح بشه. و در زمان بایند کردن دوباره همون رو ساختید و متاسفانه شرطش اشتباه است.
اون شرط به معنی true تفسیر میشه و کل رکوردها رو برمیگردونه.
من فقط چند خطی که باید اصلاح بشه رو اینجا میذارم:


protected void Page_Load(object sender, EventArgs e)
{

Mastercar master = (Mastercar)Page.Master;
object NameG = ((DataList)master.FindControl("DataList1")).Select edValue;

string sqlQuery = "Select * from tbl_c Where codG = " + NameG.ToString();//اگر خطا گرفتید اون کانورت کنید به عدد سپس به استرینگ اضافه کنید.
BindGridViews(sqlQuery);
}
private void BindGridViews(string sqlQuery)
{
System.Data.DataTable newsTable = new System.Data.DataTable();

try
{
...

چون نوع داده کلید اصلی رو نمیدونستم براتون کامنت گذاشتم که اگر به خطا برخورد حتما اون رو کانورت کنید.
Convert.ToInt32(...)
اگر نوع عددی باشه احتمالا نباید خطایی رخ بده.



----
به نظرم باید اسم مسترپیج، دیتالیست، گرید ویوها و هر آنچه که در این سناریو دخیل هستند رو مشخص کنید تا بشه شبیه سازی کرد. دقیقا ذکر کنید که هر کنترلی توی کدم مسترپیج یا صفحه قرار داره.

mRizvandi
سه شنبه 26 فروردین 1393, 00:29 صبح
فیلد id من تو اسکیول سرورم تو جدول اخبار دارم اما بازم همین خطا!!!
ببخشید فیلد id هم باید تو منو تیترم باشه؟چون من منوم فقط فیلد تیترو گذاشتم به نظرتون ربطی داره؟

بعد از این همه تلاش شما همچنان مساله باقی است!
پیغام خطا میگه شما فیلد id ندارید، ممکنه اصلا درست بایند نشده باشه.
کل کدهای مربوط به گرید، و بایند کردنش رو بذارید و دقیقا بگید که در چه زمانی و در کدام خط خطا گرفته میشه. امیداورم که بشه مساله رو پیدا کرد.

okpnz1
سه شنبه 26 فروردین 1393, 00:39 صبح
نشد ببخشید شمارم خسته کردم
کدارو باید از نو بررسی کنم ممنون که بهم کمک کردین

mRizvandi
سه شنبه 26 فروردین 1393, 00:42 صبح
نشد ببخشید شمارم خسته کردم
کدارو باید از نو بررسی کنم ممنون که بهم کمک کردین

خواهش میکنم، فکر نمی کنم مساله خاصی باشه، مساله فقط در تعریف سناریو هست. وگرنه کدهای خیلی ساده هستند.

okpnz1
سه شنبه 26 فروردین 1393, 00:48 صبح
یه مسترپیج دارم به اسم mastercar
که توش یه دیتا لیست گذاشتم به اسم datalist1 که به جدول دیتا لیست به اسم tgroups (دارای فیلد های codG و NameG)
یه صفحه دارم مثلا x.aspx که توش یک گریدویو گذاشتم و براساس چیزهایی که گفتین کدشو زدم ( این جام یه جدول دارم به اسم tbl_p با فیلدهای cod_p , NameG , NameP , date, Price, image , ..)
من دو تا جدولا نام گروه رو مشترک گرفتم نه کد گروه


یه نکته توی کدهای قبلی خودم کد گروه رو مشترک گرفتم برای اینکه مثال های شما بیشتر با کد یا همون آی دی بود (نگین :گیج: ها)

mRizvandi
سه شنبه 26 فروردین 1393, 01:00 صبح
خب اینطوری بهتر شد، حالا میدونم که شما یک دیتا لیست دارید که توی مسترپیج گذاشتید و نقش منو رو بازی میکنه و هرجایی که کاربر باشه و یکی از عنوانهای این دیتالیست رو بزنه باید مشخصات اون محصول نمایش داده بشه.
پس به روش QueryString کار می کنیم.
کد دیتالیست صحیح هست، چون دیدم که از هایپرلینک استفاده کرده بودید. (هر فیلدی که برای بایند کردن و پیدا کردن اطلاعات در جدول دوم نیاز دارید به پارامتر هایپرلینک بدید، آی دی یا نام گروه)
پس کد صفحه رو به روش کوئری استرینگ تغییر بدید

okpnz1
سه شنبه 26 فروردین 1393, 01:10 صبح
خب اینطوری بهتر شد، حالا میدونم که شما یک دیتا لیست دارید که توی مسترپیج گذاشتید و نقش منو رو بازی میکنه و هرجایی که کاربر باشه و یکی از عنوانهای این دیتالیست رو بزنه باید مشخصات اون محصول نمایش داده بشه.
پس به روش QueryString کار می کنیم.
کد دیتالیست صحیح هست، چون دیدم که از هایپرلینک استفاده کرده بودید. (هر فیلدی که برای بایند کردن و پیدا کردن اطلاعات در جدول دوم نیاز دارید به پارامتر هایپرلینک بدید، آی دی یا نام گروه)
پس کد صفحه رو به روش کوئری استرینگ تغییر بدید
ممنون پس من با پست اول باید پیش برم
انجام میدم بازم مزاحمتون میشم