PDA

View Full Version : سوال: دسترسی به checkbox موجود در فیلدی از gridview



arash69
یک شنبه 10 فروردین 1393, 23:34 عصر
سلام به همه دوستان.
سوالی در رابطه با دسترسی به فیلدی از gridview که حاوی checkbox می باشد؛ داشتم.
از طریق کد زیر این کار رو انجام میدم:
CheckBox checkBox=(CheckBox)orders_table.Rows[i].FindControl("checkRemove");

اما ظاهرا" با توجه به debug هم که انجام میدم؛ و نشون نمیده که checkbox چک زده شده، برای همین هم فکر میکنم که کلا به checkbox دسترسی پیدا نمیکنه.

ممنون میشم راهنمایی کنید.

aminireza65
یک شنبه 10 فروردین 1393, 23:51 عصر
اگر از template field استفاده میکنی این کد خاصیت checked چک باکس رو میده:

GridView1.Rows[i].Cells[j].Controls.OfType<CheckBox>().FirstOrDefault().Checked

arash69
دوشنبه 11 فروردین 1393, 00:10 صبح
اگر از template field استفاده میکنی این کد خاصیت checked چک باکس رو میده:

GridView1.Rows[i].Cells[j].Controls.OfType<CheckBox>().FirstOrDefault().Checked

ممنون از پاسختون، اما با این کد هم باز با وجود چک زده شدن، بصورت true نشون نمیده.

ali.n93
دوشنبه 11 فروردین 1393, 00:55 صبح
فکر میکنم باید cells رو هم تعیین کنید. مثلا:

CheckBox checkBox=(CheckBox)orders_table.Rows[i].Cells[5].FindControl("checkRemove");

اگر بازم کار نکرد میتونید به جای FindControl از Controls استفاده کنید:

CheckBox checkBox=(CheckBox)orders_table.Rows[i].Cells[5].Controls[1];

اگر Controls[1] کار نکرد عدد 1 رو باید عوض کنید و 0 بزارید

arash69
دوشنبه 11 فروردین 1393, 13:00 عصر
فکر میکنم باید cells رو هم تعیین کنید. مثلا:

CheckBox checkBox=(CheckBox)orders_table.Rows[i].Cells[5].FindControl("checkRemove");

اگر بازم کار نکرد میتونید به جای FindControl از Controls استفاده کنید:

CheckBox checkBox=(CheckBox)orders_table.Rows[i].Cells[5].Controls[1];

اگر Controls[1] کار نکرد عدد 1 رو باید عوض کنید و 0 بزارید

ممنون از پاسختون؛ اما نمیدونم مشکل از کجای کار هست که بازهم با وجود چک زده شدن checkbox؛ موقع debug کردن false نشون میده.

ali.n93
دوشنبه 11 فروردین 1393, 13:03 عصر
کد گریدویو و کد C# رو کامل بزارید بهتر میشه فهمید قضیه از چه قراره

arash69
دوشنبه 11 فروردین 1393, 13:23 عصر
کد گریدویو و کد C#‎‎‎‎ رو کامل بزارید بهتر میشه فهمید قضیه از چه قراره

کد مربوط به gridview و button "حذف سفارش" به شکل زیر هست:

<asp:Panel runat="server" ScrollBars="Auto"> <asp:GridView runat="server" ID="orders_table"> <Columns> <asp:TemplateField HeaderText="حذف"> <ItemTemplate> <asp:CheckBox ID="checkRemove" ClientIDMode="Static" runat="server" /> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </asp:Panel> <asp:Button runat="server" ID="rmvdata" Text="حذف سفارش" OnClick="rmvorder" />

و کد قسمت #C هم به شکل زیر هست:

public void rmvorder(object sender, EventArgs e) {
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrin gs["dbcon1"].ConnectionString);
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "DELETE FROM orders where name=@pname,phone=@pphone,addr=@paddr,subj=@psubj, explanation=@pexplanation";
cmd.Connection = con;
foreach (GridViewRow gvRow in orders_table.Rows)
{
CheckBox checkBox = (CheckBox)gvRow.Cells[0].FindControl("checkRemove");
if (checkBox.Checked)
{
cmd.Parameters.AddWithValue("@pname", gvRow.Cells[1].Text);
cmd.Parameters.AddWithValue("@pphone", gvRow.Cells[2].Text);
cmd.Parameters.AddWithValue("@paddr", gvRow.Cells[3].Text);
cmd.Parameters.AddWithValue("@psubj", gvRow.Cells[4].Text);
cmd.Parameters.AddWithValue("@pexplanation", gvRow.Cells[5].Text);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}
}

mRizvandi
دوشنبه 11 فروردین 1393, 15:03 عصر
چرا خصوصیت ClientIDMode رو Static گذاشتید؟ دارید با جاوا اسکریپت کاری روی گرید انجام می دهید؟

arash69
دوشنبه 11 فروردین 1393, 16:36 عصر
چرا خصوصیت ClientIDMode رو Static گذاشتید؟ دارید با جاوا اسکریپت کاری روی گرید انجام می دهید؟

نه به این خاطر نه. راستش فکر کردم شاید اون ID که به checkbox دادم موقع اومدن روی browser تغییر کنه و تابع findcontrol نتونه با اون ID که بهش میدم؛ پیداش کنه.
البته فکر نمی کنم ربطی به این موضوع داشته باشه، چرا که سمت server هست.

arash69
دوشنبه 11 فروردین 1393, 17:37 عصر
از دوستان اگه کسی میتونه راهنمایی کنه، ممنون میشم.

aminireza65
دوشنبه 11 فروردین 1393, 20:20 عصر
من اون تیکه کدی که نوشتم رو قبلا ازش استفاده کردم و کار هم میکنه.
نمیدونم مشکلت از چیه.
اگه میخوای من یه نمونه درست کنم برات بفرستم.

mRizvandi
دوشنبه 11 فروردین 1393, 20:40 عصر
حدس میزنم گرید رو دارید در زمان Page_Load پر می کنید، درسته؟

arash69
دوشنبه 11 فروردین 1393, 21:13 عصر
حدس میزنم گرید رو دارید در زمان Page_Load پر می کنید، درسته؟

بله کاملا" صحیح هست توی زمان Page_Load پر میکنم؛ یعنی مشکل از اینه؟

mRizvandi
دوشنبه 11 فروردین 1393, 21:21 عصر
خب اتفاقی که می افته اینه که اول صفحه لود میشه و بعد بایند میشه و همه چی ریست میشه.
کد بایند کردن رو بذار داخل این if:


if (!Page.IsPostback)
{
//Bind the gridview
}

arash69
دوشنبه 11 فروردین 1393, 21:28 عصر
خب اتفاقی که می افته اینه که اول صفحه لود میشه و بعد بایند میشه و همه چی ریست میشه.
کد بایند کردن رو بذار داخل این if:


if (!Page.IsPostback)
{
//Bind the gridview
}

خدا رو شکر حل شد:لبخندساده: خیلی ممنون از راهنماییتون.