PDA

View Full Version : مقدار دهی به پارامترها برای گرید ویو



rational unified process
یک شنبه 24 آذر 1392, 21:35 عصر
سلام
من یک grid view دارم به شکل زیر
113997
همانطور که میبینید یه Template field دارم که یه button داخلش گذاشتم به نام "ثبت سفارش".
کاری که من میخوام بکنم اینه که با زدن هر کدوم از این دکمه های ثبت سفارش ،اون رکورد رو ور داره داخل بانک ذخیره کنه.چه جوری این کارو انجام بدم؟
توی رویداد کلیک اون دستور insert زیر رو نوشتم

insert into table (id,name) values (@par1,@pa12)


حالا نمیدونم پارامترا رو چه جوری مقدار بدم:

cm.Parameters.AddWithValue("par1",??????);


پس به واقع سوال من اینه که:
اولا چه طوری متوجه بشم کدوم دکمه زده شده؟
ثانیا پارامترا رو چطوری مقدار بدم؟ مثلا فرضا اگه گرید ویو نداشتم و مثلا یه تکست باکس معمولی داشتم به راحتی برای object value مربوط به addwithvalue میگفتم textbox1.Text ولی برای گرید ویو نمیدونم چکار کنم؟

ali.n93
یک شنبه 24 آذر 1392, 21:45 عصر
اول باید خصوصیت commandargument مربوط به button رو به فیلدی که میخوای bind کنی که بعدا مقدار های par1 و par2 رو بتونی بدست بیاری
و به جای این که از رویداد click استفاده کنی باید از رویداد command استفاده کنی.
توی رویداد command با کد زیر میتونی به مقدار commandargument دسترسی داشته باشی

e.CommandArgument.ToString();

rational unified process
دوشنبه 25 آذر 1392, 01:48 صبح
ممنون.توضیحات بیشتر میخوام.فرض بر این باشد که من اماتورم.
1-درباره رویداد command و مشخصه های command name و command argument بیشتر توضیح بده.تا حالا ازش استفاده نکردم.
2-بعد اینکه مشخصه command argument رو چ جوری به فیلد مورد نظر bind کنم؟
3-سوال بعد اینکه اگر من بجای button از check box استفاده میکردم ، میتونستم با متد find control ان چکباکسی که تیک خورده رو پیدا کنم و مثلا بگم
if(chk.checked==true)
{
دستورات
}
ولی اگر همچنان مسر باشم که از button استفاده کنم،چ جوری میتونم دکمه کلیک شده رو پیدا کنم؟
اگر دستور زیر رو بنویسم خطا میگیره چون checked برای چکباکس یک مشخصه است ولی click برای دکمه مشخصه بحساب نمیاد.بجای کلمه قرمز شده(click) چی باید بذارم؟

Button btn= (Button)GridView1.Rows[i].FindControl("Button1");
if(btn.click==true)
{
دستورات
}

ali.n93
دوشنبه 25 آذر 1392, 18:06 عصر
رویداد command هم مانند رویداد click موقع کلیک کردن روی دکمه اجرا میشه
commandArguments و commandName مثل دو تا متغیر هستند که برای هر دکمه تعریف میشن و میشه ازشون استفاده کرد. برای استفاده از اونها مثل بقیه ویژگی های button باید از ID دکمه استفاده کنی. اما چون وقتی که از گرید ویو استفاده می کنیم یک button چندین بار تکرار میشه و همه ی اونها دارای یک رویداد click هستند بنابراین ID وجود ندارد که بتونیم با کمکش commandArguments یا commandName رو به دست بیاریم. حالا کاربرد رویداد command مشخص میشه. توی رویداد command با کمک e و کد زیر میتونی commandArgument یا commandName دکمه کلیک شده رو به دست بیاری.
(دکمه کلیک شده رو نمیشه مثل چک باکس انتخاب شده تشخیص داد، باید از رویداد command استفاده کرد تا خود دکمه بهت اعلام کنه که کلیک شده)

string s = e.CommandName.ToString();

اما برای bind کردن به یکی از فیلدها از کد زیر استفاده کن.البته به جای code فیلد مورد نظر خودت رو بنویس

<asp:Button ID="Button1" runat="server" Text="aaaaa" CommandArgument='<%# Eval("code") %>' />

ahmad156
دوشنبه 25 آذر 1392, 20:36 عصر
<asp:TemplateField>
<ItemTemplate>
<asp:ImageButton ID="btnDelete" runat="server" CommandArgument="<%# Bind('keywordId') %>"
CommandName="del" ImageUrl="../images/Icons/icn_delete.png" OnClientClick="return confirm('آیا از حذف مطمئن هستید؟');"/>
</ItemTemplate>
</asp:TemplateField>


protected void gvKeyWords_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName=="del")
{
if (new KeyWordBLL().DeleteKeyWord(e.CommandArgument.ToInt ())>0)
{
BindGvKeyWord();
}
}
}