PDA

View Full Version : سوال: DataBinding Problem، نحوه ی بایند کردن DataList به DataTable



hdv212
دوشنبه 01 مهر 1387, 18:13 عصر
سلام و خسته نباشید
یک DataList خیلی ساده روی Page ام کشیدم با دو Lable به صورت زیر :

<asp:DataList ID="DataList1" runat="server" EnableViewState="false" DataKeyField="id">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("title") %>'></asp:Label>
<hr />
<asp:Label ID="Label2" runat="server" Text='<%# Eval("body") %>'></asp:Label>
</ItemTemplate>
</asp:DataList>
حالا در CodeBehind صفحه هم این کد رو نوشتم :

public partial class _Default : System.Web.UI.Page
{
int i = 0;
DataTable dt = new DataTable();
string title = string.Empty;

DataColumn dc1 = new DataColumn("id");
DataColumn dc2 = new DataColumn("title");
DataColumn dc3 = new DataColumn("body");

protected void Page_Load(object sender, EventArgs e)
{
this.dt.Columns.Add(dc1);
this.dt.Columns.Add(dc2);
this.dt.Columns.Add(dc3);

this.DataList1.DataSource = this.dt;
this.DataList1.DataBind();
}
protected void Button1_Click(object sender, EventArgs e)
{
this.title = "Title - " + this.i.ToString();
string body = this.FCKeditor1.Value;

this.dt.Rows.Add(new object[] { this.i, this.title, body });
}
}

اما پس از فشار دادن دکمه، هیچ اتفاقی نمیفته، مشکل کجاست ؟

hdv212
سه شنبه 02 مهر 1387, 18:40 عصر
کسی نبود ؟

Behrouz_Rad
سه شنبه 02 مهر 1387, 19:59 عصر
این مشکل اکثر افرادی هست که به تازگی از Win Apps به Web Apps مهاجرت کردن و مفاهیم ویندوز رو با وب اشتباه می گیرند.
پس از اینکه صفحه ای به کلاینت پاس داده شد، تمامی منابع خاص اون صفحه هم از بین میرن.
متغیر عمومی در صفحات وب معنا نداره. برای اینکه موجودیتی رو در تمامی صفحات داشته باشی از مکانیزم های مختلفی که ارائه شده مثل Session، Cache، Application و ... باید استفاده کنی.
کدی که نوشتی بر طبق ماهیت وب، هر بار تمامی اشیا رو مجددا ایجاد می کنه و در نتیجه، DataTable همیشه خالی هست.
کد اصلاح شده رو به شکل ذیل واست نوشتم. البته کمی با عجله نوشتم. میتونی قشنگتر هم بنویسیش:


public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Session["dt"] != null)
{
DataTable dt = (DataTable)Session["dt"];
DataList1.DataSource = dt;
DataList1.DataBind();
}
}
}

protected void Button_Click(object sender, EventArgs e)
{
int i = 0;
string title = string.Empty;
title = "Title - " + i.ToString();
string body = FCKeditor1.Value;;

if (Session["dt"] == null)
{
DataTable dt = new DataTable();

DataColumn dc1 = new DataColumn("id");
DataColumn dc2 = new DataColumn("title");
DataColumn dc3 = new DataColumn("body");

dt.Columns.Add(dc1);
dt.Columns.Add(dc2);
dt.Columns.Add(dc3);

dt.Rows.Add(new object[] { i, title, body });

Session["dt"] = dt;

DataList1.DataSource = dt;
DataList1.DataBind();
}
else
{
DataTable dtTemp = (DataTable) Session["dt"];
dtTemp.Rows.Add(new object[] { i, title, body });
Session["dt"] = dtTemp;

DataList1.DataSource = dtTemp;
DataList1.DataBind();
}
}
}

موفق باشید.