PDA

View Full Version : سوال: مشکل این کد چیه؟فوریه



mzosan817
یک شنبه 04 مهر 1389, 11:58 صبح
protected

void GridYatim_RowCommand(object sender, GridViewCommandEventArgs e)

{
if (e.CommandName == "Select")
{
Session["command"] = "Select";

GridYatim_SelectedIndexChanged( sender, e);
}
elseif (e.CommandName == "Hamian")
{
Session["command"] = "Hamian";

GridYatim_SelectedIndexChanged(sender, e);
}
}
//////////////////
protectedvoid GridYatim_SelectedIndexChanged(object sender, EventArgs e)
{
if (Session["command"].ToString() == "Select")
{
bool hactive = bool.Parse(GridYatim.DataKeys[GridYatim.SelectedIndex].Values

["HActive"].ToString());
else


bool hactive = bool.Parse(GridYatim.DataKeys[GridYatim.SelectedIndex].Values

["Active"].ToString());
///////////////

من یه دیتاگرید دارم که دوستون select بهش اضافه کردم که با خاصیت commandname فرقشون می گذارم و میخوام با کلیک بر روی این دو ستون کارهای مختلفی مثل کد بالا اجرا بشه ولی به محض اینکه اولین خط رخداد SelectedIndexChangedاجرا میشه خطا میده چرا؟
در صورتی که بدون

if (Session["command"].ToString() == "Select")

کاملا اجرا میشه
ممنون میشم راهنماییم کنید

mzosan817
دوشنبه 05 مهر 1389, 10:08 صبح
ببینید من کار زیاد سختی که نمی خوام انجام بدم فقط میخوام دو تا ستون به گریدویو اضافه کنم که با کلیک بر روی هر کدوم کد متفاوتی اجرا بشه حالا چون فقط ستون select میتونه این کار رو انجام بده دو تا ستون select به دیتاگرید اضافه کردم و با استفاده از خاصیت command nameدر رخداد selectedchangedکد متفاوتی اجرا میشه ولی کد داخل رخداد خطا میده در صورتی که بدون if کاملا اجرا میشه
چرا؟
Please Help meeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee:گریه:

hamedsabzian
دوشنبه 05 مهر 1389, 10:38 صبح
تنها از رویدار ItemCommand استفاده کنید.
دوتا LinkButton با CommandName خاص و

CommandArgument='<%# Container.DataItem.ItemIndex %>'
حالا از این کد استفاده کنید:

GridYatim.DataKeys[Convert.ToInt32(e.CommandArgument)]
اینقدر هم زود از Session استفاده نکنید.
موفق باشید.

mzosan817
دوشنبه 05 مهر 1389, 11:18 صبح
این کد که گفتید رو در چه رخدادی قرارش بدم رخداد ItemCommand که نداریم؟
میشه بیشتر راهنمایی کنید

mzosan817
دوشنبه 05 مهر 1389, 12:40 عصر
hamedsanzian میشه کاملتر توضیح بدین من از دو ستون buttonfiled استفاده کردم مشکل کار کجاست؟

majnun
دوشنبه 05 مهر 1389, 15:33 عصر
درون ستون یه لینک باتن بزارید و مقداری که میخواین بگیرید را به CommandArgument گرید بایند کنید

اکنون در رویداد کلیک میتونید به این صورت اون مقدار رو بگیرین



LinkButton m = (LinkButton)sender;
int i = Int32.Parse(m.CommandArgument);


اینجوری برای هر ستون یک لینک باتن دارید که رویداد کلیکش متفاوته

اگه درست متوجه سوالتون شده باشم این راهشه

hamedsabzian
دوشنبه 05 مهر 1389, 17:38 عصر
این کد که گفتید رو در چه رخدادی قرارش بدم رخداد ItemCommand که نداریم؟
میشه بیشتر راهنمایی کنید
ببخشید! منظورم همون RowCommand بود.
از ItemTemplate استفاده کنید نه ButtonField.

hamedsabzian
دوشنبه 05 مهر 1389, 17:46 عصر
hamedsanzian میشه کاملتر توضیح بدین من از دو ستون buttonfiled استفاده کردم مشکل کار کجاست؟

<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CommandName="c1" CommandArgument='<%#Container.DataItemIndex %>'>LinkButton1</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CommandName="c2" CommandArgument='<%#Container.DataItemIndex %>'>LinkButton2</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "c1")
{
//GridView1.DataKeys[Convert.ToInt32(e.CommandArgument)].Values["Key"]...
}
else if (e.CommandName == "c2")
{

}
}

mzosan817
سه شنبه 06 مهر 1389, 07:51 صبح
یه دنیــــــــــــــــــــــ ـــــــــــــــــــــــــ ــــــــا ممنــــــــــــــــــــــ ـــــــــــــــــــــــــ ــــــــــــــــــون:کف:
مشکلم حل شد