PDA

View Full Version : نمایش chechbox در گرید و نحوه فهمیدن انتخاب آنها



mohammad abedi
شنبه 08 آبان 1389, 07:44 صبح
با سلام به همه دوستان، امیدوارم مثل همیشه جوابمو از شما عزیزان بگیرم.
کنترل گرید رو به یکی از جداولم متصل و به اضای یکی از فیلدهای جدولم از کنترل check box استفاده کردم (در template ). تا الان هیچ مشکلی ندارم. حال میخوام با زدن یک دکمه متوجه بشم که کدام یکی از checkboxها انتخاب شدن؟ یعنی بیاد و id رکوردهایی که انتخاب شدن را به عنوان خروجی به من بده.
((گریدم رو با sqldatasource به db وصل کردم. به عنوان مثال دو فیلد دارم یکی ID و دیگری NAME که به ازای فیلد Name از checkbox استفاده کردم.))
با تشکر از همه شما عزیزان.

leila_mahyanet
شنبه 08 آبان 1389, 09:38 صبح
کد زیر این کار رو انجام میده . به ازای هر رکورد حلقه اجرا شده و در صورت انتخاب شدن checkbox مقدار id آن رکورد را در متغیر checkId می ریزد و ...






protectedvoidButton1_Click(objectsender, EventArgs e)
}
Foreach (GridViewRow rowinGridView1.Rows)
{
CheckBox cb = (CheckBox)row.FindControl("CheckBox1");
If (cb != null && cb.Checked)
{

intcheckedId= Convert.ToInt32(GridView1.DataKeys[row.RowIndex].Value);

ادامه کد مورد نظر //

}
}
}

karim orooji
شنبه 08 آبان 1389, 09:56 صبح
کد زیر این کار رو انجام میده . به ازای هر رکورد حلقه اجرا شده و در صورت انتخاب شدن checkbox مقدار id آن رکورد را در متغیر checkId می ریزد و ...

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

leila_mahyanet
شنبه 08 آبان 1389, 10:09 صبح
خوب یک آرایه تعریف کنید و تو حلقه هربار id رکورد انتخاب شده رو تو آرایه بریزید یا هر روش دیگه یا کدی که مورد نظرتون هست . فکر نمیکردم اونم باید توضیح بدم.

karim orooji
شنبه 08 آبان 1389, 10:15 صبح
سلام این نمونه رو برات درست کردم
با توجه با کد دوستمون
که چک هایی که در گرید میخوره رو در یک لیست باکس نمایش میده(تغییراتش با خودت)

موفق باشی

leila_mahyanet
شنبه 08 آبان 1389, 11:07 صبح
دوستمون id رکوردهای انتخاب شده رو در خروجی میخواستن. فکر می کنید محتوی لیست باکس خروجی شما بهشون کمکی کنه ؟

mohammad abedi
شنبه 08 آبان 1389, 11:21 صبح
با سلام و تشکر از توجه شما. از تمام عزیزان ممنونم.:تشویق:
آقای کریمی کدتونو دیدم حال اگه بخوام id رکورد رو برگردونه به جای اسم رکورد باید چه کدی بنویسم.
شما از این کد استفاده کردین:


ListBox1.Items.Add("انتخاب شد " + check.Text)


من میخوام فیلد id اون رکوردها رو برام بریزه تو list box

karim orooji
شنبه 08 آبان 1389, 11:23 صبح
سلام
من در بانک فیلد ID رو تعریف کردم
میتونند با اضافه کردن یک boundfieldبه گرید و اتصال اون به بانک
و مقدار id رو فراخونی کنند کاری نداره :چشمک:

mohammad abedi
شنبه 08 آبان 1389, 11:39 صبح
آقای کریمی میشه یکم بیشتر توضیح بدین. من فیلد id رو به گرید اضافه کردم ولی نمیدونم چه شکلی میشه به اون دسترسی پیدا کرد. یعنی بیاد و id اون رکوردو بخونه!!!!

leila_mahyanet
شنبه 08 آبان 1389, 12:01 عصر
جناب mohammad abedi
من در اولين پست جواب رو براتون گذاشته بودم. اگر فيلد كليد گريدتون همون id باشه كه معمولا هست. ميتونيد به صورت زير بگيريدش




checkedId= Convert.ToInt32(GridView1.DataKeys[row.RowIndex].Value);

اين id رو تو حلقه for ميگيره. حالا هر طور كه ميخواهيد ازش استفاده كنيد. حتي ميتونيد تو ليست باكسي كه دوستمون پيشنهاد دادن بريزيد

mohammad abedi
شنبه 08 آبان 1389, 12:14 عصر
خانم leyla_mahyanet !! من باید به جای row.rowindex چه چیزی قرار بدم. اگه منظورتونو درست فهمیده باشم باید index مربوط به کلید جدولمو قرار بدم که منم 0 گذاشتم و وقتی دکمه رو میزنم تمام لیست باکسم با عدد 1 پر میشه.:متفکر:

unishomal
شنبه 08 آبان 1389, 12:30 عصر
فیلد مورد نظرباید از نوع <ItemTemplate> باشد...دقت کن فقط اونایی که تیک خورده به صورت یه آرایه با نام checkbox میره سمت

سرور.....





<asp:TemplateField>
<ItemTemplate>
<input type="checkbox" name="cb_selected" id="cb_selected" value="<%# DataBinder.Eval(Container,"DataItem.Id")%> " />
</ItemTemplate>
</asp:TemplateField>
دقت کن =<id کلید جدول منه و ممنه تو جدول شما کلید چیزه دیگهای باشه

DataItem.Id




مثلا من اگه بخوام وایه delete از ش استفاده کنم




if (Request["cb_selected"] != null)
{
Response.Redirect("Admin.aspx?content=titr" + "&mode=edit&id=" + Request["cb_selected"].ToString());
}



آی دی تیک خورده ها بصورت یه آرایه که با , از هم جدا میشنو بر می گردونه و واسه استفاده ازش کافیه split کنیش.....



string [] select=null;
if (Request["mode"] != null && Request["mode"] == "delete")
{

if (Request["id"] != null)


select = Request["id"].Split(',');


for (int i = 0; i < select.Length; i++)
{
ln1.Id = Int32.Parse(select[i]);
ln1.delete();

}}


ok?

karim orooji
شنبه 08 آبان 1389, 13:25 عصر
سلام دوست عزیز
اینم برنامه رو با اون چیزی که مد نظر شما بود تغییرش دادم
فقط بانک برنامه رو همون بانک قبلی رو به برنامه اضافه کن

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




lbl.Text =

CType(grd.FindControl("lbl_id"), WebControls.Label).Text


باز هم سوال بود مطرح کن:لبخندساده:



موفق باشی

mohammad abedi
شنبه 08 آبان 1389, 15:04 عصر
آقای کریمی من از C# استفاده میکنم. کد شما به این خط تبدیل شده و از اون اشکال میگیره (اجرا نمیشه). این ctype چیه؟

lbl.Text = ((WebControls.Label)grd.FindControl("lbl_id")).Text;
میدونم خیلی زحمت دادم ولی دیگه آخراشه:چشمک:. ممنون.

karim orooji
شنبه 08 آبان 1389, 16:28 عصر
سلام ببخشید دیر جواب دادم(خود من هم نمیدونستم چیکار میکنه پس جستجو کردم)
در ضمن من کریمی نیستم کریم اروجی هستم
تایع ctype برای تبدیل کردن به رشته میباشد

mohammad abedi
یک شنبه 09 آبان 1389, 10:37 صبح
سلام
آقای اروجی برناممو یه جوری انجام دادم و واقعا از شما ممنونم این قدر با مسئولیت هستید و موضوع رو پیگیری میکنید . باز هم ممنون.:تشویق: