PDA

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



mahdi87_gh
جمعه 16 بهمن 1388, 18:19 عصر
سلام
من داخل دیتالیست یک imagebutton دارم که درواقع دکمه delete هستش و اون سطر رو باید از بانک حذف کنه.مشکل اینجاست که من زیاد توی وب وارد نیستم(بیشتر ویندوز کار کردم) و datalist متدی مثل کلیک نداره. چطوری بتونم تشخیص بدم که دکمه کدوم سطر یا به عبارتی کدوم دکمه کلیک شده؟
مرسی

YourWorldToday
جمعه 16 بهمن 1388, 22:26 عصر
سلام برای حذف کرد نیاز به ای دی دارید
با این کد میشه که به کد ردیفی که کلیک شده دسترسی داشته باشید


DItem.DataKeys(e.Item.ItemIndex).ToString)

البته این کد را باید در رویداد ItemCommand بنویسی
اگر چند تا دکمه در دیتالیست داری باید به هر کدام از دکمه یه نام بدی (commandname)
بعد در رویداد با چک کن که کدام دکمه کلیک شده است


if e.commandname="delete" then
//do something
else if e.commandname="edit" then
//do something
....

mahdi14694
جمعه 21 خرداد 1389, 01:56 صبح
ببخشید این کد فقط ردیف رو میده . چطور می تونیم به فیلد های datalist دسترسی داشته باشیم. مثلا برای delete باید فیلد IDرو داشته باشیم تا در شرط query قرار بدیم

hamedsabzian
جمعه 21 خرداد 1389, 02:40 صبح
مثال:
protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
{
if (e.CommandName == "del")
{
//DataKeys
DataList1.DataKeys[e.Item.ItemIndex];
//دستیابی به مقادیر داده ای
DataRow row = e.Item.DataItem as DataRow;
Literal litname = e.Item.FindControl("litname") as Literal;
litname.Text = row["productname"].ToString();
}
}

mahdi14694
جمعه 21 خرداد 1389, 14:00 عصر
DataList1.DataKeys[e.Item.ItemIndex];

شما از این کد چه استفاده ای کردید؟

hamedsabzian
جمعه 21 خرداد 1389, 15:33 عصر
صرفا یه مثال از دسترسی به مقدار فیلد هایی که توی قسمت DataKeyNames به عنوان DataKey تعریف شده بود.

mahdi14694
جمعه 21 خرداد 1389, 19:52 عصر
من تو دیتا لیست یک imageButton گذاشتم و cammandname رو delete نام گزاری کردم. و در رویداد Itemcommand دیتا لیست این کد رو نوشتم:

protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
{

if (e.CommandName == "Delete")
{
//DataList1.DataKeys[e.Item.ItemIndex];
DataRow row = e.Item.DataItem as DataRow;
Literal litname = e.Item.FindControl("litname") as Literal;
litname.Text = row["PicturID"].ToString();
string str = litname.Text;
lblError.Text = str;
SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=E:\C\Document \Visual Studio 2010\WebSites\Gallery\App_Data\Gallery.mdf;Integra ted Security=True;User Instance=True");
SqlCommand cmd = new SqlCommand("Delete FROM Gallery WHERE PictureId='" + str + "'", con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}

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

hamedsabzian
جمعه 21 خرداد 1389, 20:51 عصر
کد کامل DataList رو هم بزارید.

mahdi14694
جمعه 21 خرداد 1389, 21:43 عصر
کدشو مثل این صفحه نوشتم
http://barnamenevis.org/forum/showthread.php?t=125079

اما اگه HTML رو میخای

<asp:DataList ID="DataList1" runat="server" BorderColor="White"
BorderWidth="2px" RepeatColumns="4"
onitemdatabound="DataList1_ItemDataBound"
ondeletecommand="DataList1_DeleteCommand"
onitemcommand="DataList1_ItemCommand" style="margin-bottom: 0px">
<ItemTemplate>
<asp:Label ID="Label8" runat="server" Font-Bold="True" Font-Names="Tahoma"
ForeColor="White" Text="شماره تابلو"></asp:Label>
<asp:Label ID="PicturID" runat="server" Font-Bold="True" Font-Names="Tahoma"
ForeColor="White" Text='<%# Eval("PictureId", "{0:D}") %>'></asp:Label>
<br />
<asp:Image ID="Image1" runat="server" Height="300px"
ImageUrl='<%# Eval("PictureURL","~/Gallery/{0}") %>' Width="250px" />
<br />
<br />
<asp:Label ID="Label3" runat="server" Font-Bold="True" Font-Names="Tahoma"
ForeColor="White" Text="قیمت:"></asp:Label>
<asp:Label ID="lblPrice" runat="server" Font-Bold="True" Font-Names="Tahoma"
ForeColor="White" Text='<%# Eval("price", "{0}") %>'></asp:Label>
<br />
<br />
<asp:Label ID="Label4" runat="server" Font-Bold="True" Font-Names="Tahoma"
ForeColor="White" Text="سایز:"></asp:Label>
<asp:Label ID="lblSize" runat="server" Font-Bold="True" Font-Names="Tahoma"
ForeColor="White" Text='<%# Eval("size", "{0}") %>'></asp:Label>
<br />
<br />
<asp:Label ID="Label5" runat="server" Font-Bold="True" Font-Names="Tahoma"
ForeColor="White" Text="نوع:"></asp:Label>
<asp:Label ID="lblKind" runat="server" Font-Bold="True" Font-Names="Tahoma"
ForeColor="White" Text='<%# Eval("Topic", "{0}") %>'></asp:Label>
<br />
<br />
<asp:Label ID="Label7" runat="server" Font-Bold="True" Font-Names="Tahoma"
ForeColor="White" Text="توضیحات:"></asp:Label>
<asp:Label ID="lblDescribe" runat="server" Font-Bold="True" Font-Names="Tahoma"
ForeColor="White" Text='<%# Eval("describe", "{0}") %>'></asp:Label>
<br />
<br />
<asp:ImageButton ID="ibDelete" runat="server" Height="36px"
ImageUrl="~/Images/delete.png" style="margin-left: 130px; margin-right: 96px"
Width="33px" onclick="ibDelete_Click" CommandName="Delete" />
</ItemTemplate>
</asp:DataList>

hamedsabzian
جمعه 21 خرداد 1389, 22:53 عصر
این کد رو امتحان کنید!
protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
{
if (e.CommandName == "Delete")
{
DataRow row = e.Item.DataItem as DataRow;
string str = row["PicturID"].ToString();
SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=E:\C\Document \Visual Studio 2010\WebSites\Gallery\App_Data\Gallery.mdf;Integra ted Security=True;User Instance=True");
SqlCommand cmd = new SqlCommand("Delete FROM Gallery WHERE PictureId='" + str + "'", con);
cmd.Connection.Open();
cmd.ExecuteNonQuery();
cmd.Connection.Close();
DataList1.DataBind();
}
}
در ضمن این قسمت رو هم اصلاح کنید:

<asp:ImageButton ID="ibDelete" runat="server" Height="36px"
ImageUrl="~/Images/delete.png" style="margin-left: 130px; margin-right: 96px"
Width="33px" CommandName="Delete" />

mahdi14694
شنبه 22 خرداد 1389, 16:28 عصر
حامد جان مشکل من حل نشد راه حل دیگه ای نداری؟

من یه لیبل گزاشتم تا ببینم event اتفاق میفته یا نه . اصلا وارد رویداد ItemCommand نمیشه.

صادق صدقی
شنبه 22 خرداد 1389, 19:33 عصر
سلام

دوست عزیز
رویه Image Button نت راست کلیک کن
و EditDataBind...
رویه گزینه CommandArgument کلیک کن
اون رو بایند کن به فیلد کلیدت
اگه نشد دستی بایند کنی
Eval("YourFeildName")

حالا از Propeties رو Image Button کلیک کن و CommandName رو بزار Delete
حالا در رویداد ItemCommand دیتالیستت اینو بنویس



if(e.CommandName=="Delete")
{
string s=e.CommandArgument.Tostring();
sqlcommand cmd=new sqlCommand("Delet From YourTable Where Feild=@id)
cmd.parameter.add("@id",sqldbtype.YourFeildType).Value=id;
connection.open();
cmd.executeNoneQuery();
........
}





اگر رویداد کار نمی کنه دیتا لیست رو پاک کن و دوباره بساز درست میشه
قبلش هم می تونی رویدادشو کامل پاک کنی شاید جواب داد

امید وارم به دردت خورده باشه
-----------------------------------------------
التماس دعا

mahdi14694
شنبه 22 خرداد 1389, 19:48 عصر
cmd.parameter.add("@id",sqldbtype.YourFeildType).V alue=id;
این خط اشتباه نیس؟

hamedsabzian
یک شنبه 23 خرداد 1389, 02:33 صبح
یک نمونه برنامه برای کار با DataList و خاصیت ItemCommand آن:

mahdi14694
یک شنبه 23 خرداد 1389, 11:35 صبح
حامد جان دستت درد نکنه، اشکالش در If(!IsPostBack) بود