ورود

View Full Version : سوال: حذف سطر از گریدویو که با DATATABLE پر شده



maryammashkani
پنج شنبه 17 اردیبهشت 1394, 08:41 صبح
سلام دوستان
من یه فروشگاه انلاین دارم طراحی میکنم که خریدهای مشتری تو یه Data table گداشته میشه و وقتی کاربر به قسمت "مشاهده سبد خرید " میره ، لیست خریدش رو توی گریدویو میبینه، تا اینجا مشکلی ندارم
حالا میخام کاربر بتونه قبل از درج در بانک اون کالاهایی رو که نمیخاد از لیست حذف و یا ویراش کنه، ولی نمیدونم چطوری کدش رو بنویسیم ؟ چون تو بانک نیست که با دستور delete * from basket بخام حذفش کنم؟؟؟؟


protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
create_table ct = new create_table();
ct.dt = (DataTable)HttpContext.Current.Session["sabad"];
GridView1.DataSource = ct.dt;
GridView1.DataBind();
}
}

ahmad156
پنج شنبه 17 اردیبهشت 1394, 09:20 صبح
for(int i = dtPerson.Rows.Count-1; i >= 0; i--)
{
DataRow dr = dtPerson.Rows[i];
if (dr["name"] == "Ali")
dr.Delete();
}

maryammashkani
پنج شنبه 17 اردیبهشت 1394, 15:37 عصر
اقای احمد ممنون.
این کد رو گذاشتم ، خطایی نداد ولی کار هم نکرد
فقط یک سطر حذف میشه ، فکر نکنم به for احتیاج داشته باشه ،
چطوری باید تشخیص داد که کذوم سطر گریدویو یا دیتالیست کیلیک شده و همون رو حذف بکنه؟
اینو هم از نام گریدویو خطا میگیرهint i=GridView1.SelectedValue;

maryammashkani
پنج شنبه 17 اردیبهشت 1394, 15:45 عصر
البته چون اطلاعات درون data table هست ، باید با توجه به فیلد "کد" اون سطر از data table حذف بشه.
لطفا راهنمایی کنید ، خیلی تو این قسمت سایت علاف شدم:گریه:

maryammashkani
پنج شنبه 17 اردیبهشت 1394, 16:55 عصر
این کد رو نوشتم کارمیکنه ولی دکمه delete هر کدوم از سطرها رو که کیلیک کنی ، اولین رکورد رو حذف میکنه

ahmad156
پنج شنبه 17 اردیبهشت 1394, 17:32 عصر
خیلی تو این قسمت سایت علاف شدم

اینجا کسی ملزم به پاسخگویی نیست پس طلبکارانه صحبت نکنین.
Break point بزارین ببینین چه اتفاقی پیش میاد

maryammashkani
پنج شنبه 17 اردیبهشت 1394, 19:10 عصر
اقای احمد
اولا که
منظور من از علاف شدم ، تو گریدویوی سایت خوذم و عدم اطلاعات خودم بود و شما منظور منو بد متوجه شدین
دوما
به قول امام علی :هر کس کلمه ای به کسی بیاموزه ،معلم اون محسوب میشه و من هیچوقت به خودم این اجازه رو نمیدم که با معلمان و دوستانم طلبکارانه صحبت کنم
سوما
فک کنم شما کلا اعصاب ندارین چون تو چند تا تایپیک دیگه هم دیدم که خیلییییییییی بد جواب کاربران رو میدین یا اینکه چون مدیر بخش هستین این اجازه رو به خودتون میدین

در کل برادر من اعصاب نداری لازم نیست جواب تایپیک ها رو بدین

ahmad156
پنج شنبه 17 اردیبهشت 1394, 20:09 عصر
منظور شما ،از متن پست تون دریافت میشه نه چیزی که توی ذهنتون هست پس اشتباه از متن شما بوده .
اینجا تالار علمی هست، قرار نیست قربان صدقه همدیگه بریم. لحن بنده هیچ گونه توهین یا تندی نداشته که شما فکر کنین بنده اعصاب ندارم.
بنده هم به عنوان مدیر بخش، هیچ تفاوتی با دیگر کاربران ندارم و جوابگویی بنده در راستای کلام امام علی(ع) هست و نه غیر(البته اگر قادر به جوابگویی باشم چه از لحاظ علمی و چه از لحاظ زمانی)
موفق باشین

keiv@n
پنج شنبه 17 اردیبهشت 1394, 21:02 عصر
اقای احمد
به قول امام علی :هر کس کلمه ای به کسی بیاموزه ،معلم اون محسوب میشه و من هیچوقت به خودم این اجازه رو نمیدم که با معلمان و دوستانم طلبکارانه صحبت کنم

به قول جوکر :
if your good at something never give it for free

maryammashkani
پنج شنبه 17 اردیبهشت 1394, 22:56 عصر
دوستان گرامی کسی نمیتونه منو راهنمایی کنه؟

maryammashkani
جمعه 18 اردیبهشت 1394, 09:27 صبح
دوستان با کمک های شما بلاخره مشکلم حل شد.
چون ممکنه دوستان دیگه هم مشکل منو پیدا کنن ، ساخت دیتاتیبا و پر کردن و حذف از دیتاتیبل رو اینجا میزارم

دوستان این یه سبد خریده که تمامی مراحلش قبل از درج در بانک در data table انجام میشه

maryammashkani
جمعه 18 اردیبهشت 1394, 09:28 صبح
ساخت data table
یک کلاس به نام create_table ایجاد کردم و برنامه زیر رو نوشتم


public DataTable dt;
public create_table()
{
dt = new DataTable("sabad");
dt.Columns.Add("sabadid",typeof(Int32));
dt.Columns["sabadid"].AutoIncrement=true;
dt.Columns["sabadid"].AutoIncrementSeed=1;
dt.PrimaryKey = new DataColumn[] { dt.Columns["sabadid"] };
dt.Columns.Add("kalaid", typeof(Int32));
dt.Columns.Add("name",typeof(string));
dt.Columns.Add("subgroupmain", typeof(string));
dt.Columns.Add("subgroupfarei1", typeof(string));
dt.Columns.Add("subgroupfarei2", typeof(string));
dt.Columns.Add("mark", typeof(string));
dt.Columns.Add("pay", typeof(Int32));
dt.Columns.Add("tedad",typeof(Int32));
//
// TODO: Add constructor logic here
//
}

maryammashkani
جمعه 18 اردیبهشت 1394, 09:32 صبح
یه کلاس دیگه به نام add_sabad ساختم که هنگام اضافه شدن رکورد به data table فراخوانی میشه که البته چک میکنه اگه قبلا رکوردی با همین مشخصات وجود داره فقط تعداد سفارش رو اضافه میکنه نه یه رکورد ، و اگه رکورد با این مشخصات نبود یک رکورد جدید اضافه خواهد کرد



public static void add(int kalaid, string name,string subgroupmain,string subgroupfarei1,string subgroupfarei2, string mark, int pay, int tedad)
{
create_table ct = new create_table();
ct.dt=(DataTable) HttpContext.Current.Session["sabad"];
bool m = false;
for (int j = 0; j <= ct.dt.Rows.Count - 1; j++)
{
DataRow dr = ct.dt.Rows[j];
if ((dr["name"].ToString() == name) && (Convert.ToInt32(dr["kalaid"]) == kalaid))
{
m = true;
dr["tedad"] = Convert.ToInt32(dr["tedad"]) + tedad;
}
}
if (m == false)
{
DataRow dr2 =ct.dt.NewRow();
dr2["kalaid"] = kalaid;
dr2["name"] = name;
dr2["subgroupmain"] =subgroupmain;
dr2["subgroupfarei1"] = subgroupfarei1;
dr2["subgroupfarei2"] = subgroupfarei2;
dr2["mark"]=mark;
dr2["pay"] = pay;
dr2["tedad"] = tedad;
ct.dt.Rows.Add(dr2);
}
HttpContext.Current.Session["sabad"] = ct.dt;
}

keiv@n
جمعه 18 اردیبهشت 1394, 09:32 صبح
خوب
ببین وقتی کاربر خرید می کنه ، همه چی روی لوکال انجام میشه و لوکال انجام شدن ینی جاوا اسکریپت ... پس دیتا تیبل واس چی استفاده کردی؟
به نظر من از همون اول بیا خرید های کاربر رو به صورت لوکال ذخیره کن ، می تونی برا نگهداری محصولات خریداری شده از آرایه استفاده کنی یا از سشن استفاده کنی ...اگر از صفحه ای به صفحه دیگه نری از آرایه (جاوا) استفاده کن و در غیر این صورت از سشن استفاده کن .... بعد حالا کاربر واقعا قصد خرید داره و عملیات خرید و درگاه بانکیو با موفقیت انجام داده اینجا باید اطلاعات خرید و مشتری رو از لوکال به سمت سرور انتقال بدی ...

maryammashkani
جمعه 18 اردیبهشت 1394, 09:34 صبح
وقتی کاربر دکمه درج کالا رو کیلیک کنه دستور زیر اجرا میشه


add_sabad.add(Convert.ToInt32(Session["idkala"]), Session["n"].ToString(), Session["sgm"].ToString(), Session["sgf1"].ToString(), Session["sgf2"].ToString(), Session["ma"].ToString(), Convert.ToInt32(Session["pay"]), Convert.ToInt32(txttedad.Text));

maryammashkani
جمعه 18 اردیبهشت 1394, 09:36 صبح
کیوان عزیز اطلاعات از صفحه ای به صفحه دیگه منتقل میشه به همین دلیل از session استفاده کردم که بخاطر کمتر شده تعداد sessionها ، داخل session یه data table ذخیره میکنم

maryammashkani
جمعه 18 اردیبهشت 1394, 09:38 صبح
حالا تو صفحه "مشاهده سبد خرید"
dlsabad نام دیتالیست هستش



if (!Page.IsPostBack)
{
create_table ct = new create_table();
ct.dt = (DataTable)HttpContext.Current.Session["sabad"];
dlsabad.DataSource = ct.dt;
dlsabad.DataBind();
}

maryammashkani
جمعه 18 اردیبهشت 1394, 09:38 صبح
protected void dlsabad_ItemCommand(object source, DataListCommandEventArgs e)
{
if (e.CommandName == "delkala")
{
create_table ct = new create_table();
ct.dt = (DataTable)HttpContext.Current.Session["sabad"];
Label idsabad= (Label)dlsabad.Items[e.Item.ItemIndex].FindControl("lblsabadid");
Label id1 = (Label)dlsabad.Items[e.Item.ItemIndex].FindControl("lblidkala");
Label lblname = (Label)dlsabad.Items[e.Item.ItemIndex].FindControl("lblnamekala");
Label lblmain = (Label)dlsabad.Items[e.Item.ItemIndex].FindControl("lblgroupmain");
Label lblf1 = (Label)dlsabad.Items[e.Item.ItemIndex].FindControl("lblf1");
Label lblf2 = (Label)dlsabad.Items[e.Item.ItemIndex].FindControl("lblf2");
Label lblmark = (Label)dlsabad.Items[e.Item.ItemIndex].FindControl("lblmark");
Label lblpay = (Label)dlsabad.Items[e.Item.ItemIndex].FindControl("lblpay");
Label lbltedad = (Label)dlsabad.Items[e.Item.ItemIndex].FindControl("lbltedad");
for (int i = ct.dt.Rows.Count - 1; i >= 0; i--)
{
DataRow dr = ct.dt.Rows[i];
if (Convert.ToInt32(dr["kalaid"]) ==Convert.ToInt32( id1.Text))
{
dr.Delete();
}
}
create_table ct1 = new create_table();
ct1.dt = (DataTable)HttpContext.Current.Session["sabad"];
dlsabad.DataSource = ct1.dt;
dlsabad.DataBind();
}
}

maryammashkani
جمعه 18 اردیبهشت 1394, 09:40 صبح
اینم برای تایید نهایی و ثبت در بانک.
البته موقع ثبت تو بانک اطلاعات کاربر سفارش دهنده هم درج میشه


protected void btntayyd_Click(object sender, EventArgs e)

{


SqlConnection conn = new SqlConnection(Session["ConnectionStr"].ToString());


create_table ct = new create_table();

ct.dt = (
DataTable)HttpContext.Current.Session["sabad"];




SqlDataAdapter dap = new SqlDataAdapter("select * from basket", conn);


DataSet ds = new DataSet();

dap.Fill(ds,
"bb");


SqlCommandBuilder cmdBldr = new SqlCommandBuilder(dap);

ds.Tables[
"bb"].Clear();


for (int j = 0; j <= ct.dt.Rows.Count - 1; j++)

{


DataRow drc = ct.dt.Rows[j];


DataRow dr = ds.Tables["bb"].NewRow();

dr[0] =
Convert.ToInt32(drc[0]);

dr[1] =
Convert.ToInt32(drc[1]);

dr[2] =
Convert.ToString(drc[2]);

dr[3] =
Convert.ToString(drc[3]);

dr[4] =
Convert.ToString(drc[4]);

dr[5] =
Convert.ToString(drc[5]);

dr[6] =
Convert.ToString(drc[6]);

dr[7] =
Convert.ToInt32(drc[7]);

dr[8] =
Convert.ToInt32(drc[8]);


//dr[9] = Convert.ToInt32(drc[9]);


string s = shamsidate(DateTime.Now.ToString());

dr[9] = s;

dr[10]=Session[
"id"].ToString();

dr[11]=Session[
"nameozv"].ToString();

dr[12] = Session[
"familyozv"].ToString();

dr[13] = Session[
"useremail"].ToString();

dr[14] = Session[
"mobilozv"].ToString();

dr[15] = Session[
"addressozv"].ToString();

ds.Tables[
"bb"].Rows.Add(dr);

}

dap.Update(ds,
"bb");

}

maryammashkani
جمعه 18 اردیبهشت 1394, 09:42 صبح
اینم برای تایید نهایی و ثبت در بانک.
البته موقع ثبت تو بانک اطلاعات کاربر سفارش دهنده هم درج میشه


protected void dlsabad_ItemCommand(object source, DataListCommandEventArgs e)
{
if (e.CommandName == "delkala")
{
create_table ct = new create_table();
ct.dt = (DataTable)HttpContext.Current.Session["sabad"];
Label idsabad= (Label)dlsabad.Items[e.Item.ItemIndex].FindControl("lblsabadid");
Label id1 = (Label)dlsabad.Items[e.Item.ItemIndex].FindControl("lblidkala");
Label lblname = (Label)dlsabad.Items[e.Item.ItemIndex].FindControl("lblnamekala");
Label lblmain = (Label)dlsabad.Items[e.Item.ItemIndex].FindControl("lblgroupmain");
Label lblf1 = (Label)dlsabad.Items[e.Item.ItemIndex].FindControl("lblf1");
Label lblf2 = (Label)dlsabad.Items[e.Item.ItemIndex].FindControl("lblf2");
Label lblmark = (Label)dlsabad.Items[e.Item.ItemIndex].FindControl("lblmark");
Label lblpay = (Label)dlsabad.Items[e.Item.ItemIndex].FindControl("lblpay");
Label lbltedad = (Label)dlsabad.Items[e.Item.ItemIndex].FindControl("lbltedad");
for (int i = ct.dt.Rows.Count - 1; i >= 0; i--)
{
DataRow dr = ct.dt.Rows[i];
if (Convert.ToInt32(dr["kalaid"]) ==Convert.ToInt32( id1.Text))
{
dr.Delete();
}
}
create_table ct1 = new create_table();
ct1.dt = (DataTable)HttpContext.Current.Session["sabad"];
dlsabad.DataSource = ct1.dt;
dlsabad.DataBind();
}
}

keiv@n
جمعه 18 اردیبهشت 1394, 12:54 عصر
خوبه
و اما در مورد سوالت باید بگم که :
اطلاعات بایند شده داخل گرید ویو در نهایت به صورت اچ تی ام ال در میان .... حالا باید توسط جاوا اسکریپت سطرهایی که کاربر انتخاب کرده رو سلکت کنی و توسط متد remove پاکشون کنی ! در پایان هم که کاربر ثبت رو زد این اطلاعات جدید یعنی سبد آپدیت شدش وارد پایگاه داده میشه ! واسه سلکت کردن و حذف رکورد ها میشه از کلاینت کلیک کنترل استفاده کنی و .... البته یه چند وقتی هست که به خاطر دشوار بودن همین مسائل کلاینت کلیک و مشکلات چاپ پیغام های خطا و موفقیت و کلا همه چی ، کنترل های ای اس پی رو گذاشتم کنار و فقط از اچ تی ام ال و ایجکس استفاده می کنم ...

maryammashkani
جمعه 18 اردیبهشت 1394, 15:06 عصر
کاملا درست میفرمایید آقای کیوان