PDA

View Full Version : یه سوال در مورد buttonfield در گرید ویو



slashslash2009
یک شنبه 17 آبان 1388, 22:14 عصر
من تو گرید ویوم یه کلید گذاشتم که موقع اجرای برنام در هر سطر از گریدویو هستش.حالا میخوام با فشار دادن او کلید برنامه بفهمه که تو چه خطی از گرید ویو هستیم یعنی کدوم row
انتخاب شده :
GridView1.SelectedIndex
ولی نمیدونم کدمو تو چه event بنویسم در Win application درون ایونت cell click میشد اینجا نمیدونم :متفکر: میشه کمک کنید

Mostafa_Dindar
یک شنبه 17 آبان 1388, 22:51 عصر
به Button اي كه تو ItemTemplate قرار دادي يك CommandName بده مثلا :

<asp:Button ID="Button1" runat="server" Text="Button" CausesValidation="false" CommandName="myCommandName"/>حالا در رويداد ItemCommand كامپوننت DataList رويداد رو هندل كن

protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
{
if (e.CommandName == "myCommandName")
{
//To do
}
}

Mostafa_Dindar
یک شنبه 17 آبان 1388, 22:57 عصر
شرمنده !:لبخندساده: فكر كردم براي DataList گفتي ( پست قبلي براي DataList بود)
مثل ديتاليست تو گرد ويو به Button خاصيت CommandName رو مقدار بده و تو رويداد RowCommnad مثل پست بالا اونو هندل كن
حالا اگه بخواي مثلا شناسه اون ركورد از گريد ويو رو بدست بياري :

if (e.CommandName == "ShowDetails")
{
int index = Convert.ToInt32(e.CommandArgument);//اين شماره انديس ركورد در گريد ويو هست

int ContactId = Convert.ToInt32(GridView1.DataKeys[index].Value);// اينم شناسه ركورد تو ديتابيس



} البته اگه بخواي به شناسه ركورد دست پيدا كني بايد خاصيت DataKeyName گريد ويو رو هم مقدار دهي كني

Himalaya
یک شنبه 17 آبان 1388, 23:02 عصر
توی ایونت


GridView1_RowCommand

و برای دسترسی به سطر مورد نظر


GridView1.Rows[Convert.ToInt32(e.CommandArgument)]

یعنی ایندکس سطر مورد نظرت میشه این کد پایین


Convert.ToInt32(e.CommandArgument)

البته باید دستوری رو که دکمه مورد نظر داره اجرا میکنه رو هم مشخص کنی(به فزض ویرایش) یعنی با خاصیت


CommandName="Edit"

توی asp:ButtonField باید به برنامه ات بفهمونی که این دکمه برای مثلا ویرایش هستش و تو ایونت GridView1_RowCommand
بگی


if (e.CommandName == "Edit")
{
// edit code
}

حتما CommandName رو برای دکمه مشخص کن و تو شرط اونو چک کن. در غیر این صورت حتی با کلیک روی شماره page های گرید هم ایونت GridView1_RowCommand اجرا میشه

slashslash2009
یک شنبه 17 آبان 1388, 23:11 عصر
من میخوام با این کار هر سطری رو که می خوام رو پاک کنم ولی یه خطا میده :
The GridView 'GridView1' fired event RowDeleting which wasn't handled.
اینم کدمه :


protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
test(sender, e);

}
private void test(object sender, CommandEventArgs e)
{
if (e.CommandName == "del1")
{
//Convert.ToInt32(e.CommandArgument)
GridView1.DeleteRow(Convert.ToInt32(e.CommandArgum ent));
}
}

Mostafa_Dindar
یک شنبه 17 آبان 1388, 23:34 عصر
اول از همه كد رو اشتباه نوشتي چون آرگومان e متد فراخواننده با آرگومان e متدي كه بايد فراخوانده ميشد متفاوته (يكي از نوع GridViewCommandEventArgs هستش و يكي هم از نوع CommandEventArgs)
اگه اينطوري مينوشتي بهتر بود :

if (e.CommandName == "dell")
{
GridView1.DeleteRow(Convert.ToInt32(e.CommandArgum ent));
} ولي بازم كل كار مشكل داره . شما بايد ركود رو از تو ديتابيس حذف كنيد نه گريد ويو (حذف ركورد از گريد ويو منطقي به نظر نميرسه !).
همونطور كه تو پست قبليم نشون دادم شناسه ركورد تو ديتابيس رو بدست بيار و تو همون رويداد كد حذف ركورد از ديتابيس رو بنويس

slashslash2009
یک شنبه 17 آبان 1388, 23:46 عصر
کدمو درست کردم :


if (e.CommandName == "dell")
{
int index = Convert.ToInt32(e.CommandArgument);
TextBox3.Text = index.ToString();
GridView1.DeleteRow(index);
}

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

Mostafa_Dindar
دوشنبه 18 آبان 1388, 00:10 صبح
اينو امتحان كن :

if (e.CommandName == "myCommandName")
{
GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Visible = false;
}

slashslash2009
دوشنبه 18 آبان 1388, 09:13 صبح
وقتی یه گرید ویو به یه table متصل باشه نمیشه به این راحتییا خطی رو درونش پاک کرد باید اول اون خط رو از table پاک کنیم بعدش دوبار گریدویو رو به اون table بایند کنیم مرسی از همتون :


table.Rows[index].Delete();
view = newDataView(table);
GridView1.DataSource = view;
GridView1.DataBind();