PDA

View Full Version : تیک فعال سازی در گرید



angel farahani
جمعه 29 فروردین 1393, 00:20 صبح
سلام دوستان ، میخوام در گرید ویو ، یک فیلد isactive رو بزارم که از نوع bit است یعنی یا false یا true ، که مدیر با زدن آن کاربر فعال شه یا غیرفعال ، حالا میخوام در گرید یک image button باشه با یکبار زدن کاربر را فعال و با یکبار زدن کاربر رو غیر فعال کنه .

میشه بگید چطور میتونم این کار رو در حالت item template گرید انجام بدم ، یعنی دکمه ای نباشه که به حالت ویرایش بره بعد فعال یا غیر فعال شه

mRizvandi
جمعه 29 فروردین 1393, 01:54 صبح
یک کنترل ImageButton توی ستون مورد نظر قرار بدید. خصوصیاتش رو تنظیم کنید.
دو خصوصیت اصلی زیر رو هم اینطوری تنظیم کنید:
CommandName = "ActiveDeactiveUser"
CommandArgument = '<%# Eval("UserID") %>'

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

حالا می تونید در رویداد RowCommand گرید با تشخیص نوع کامند عملیات مربوطه رو انجام بدید.

این هم یک شبه کد که میتونه شما رو راهنمایی کنه.

if (e.CommandName = ""ActiveDeactiveUser)
{
UserData = GetUserDataByID(e.Argument);
UserData.IsActive = !UserData.IsActive;
}

angel farahani
جمعه 29 فروردین 1393, 01:56 صبح
من با روشی که در اینجا آموزش گذاشته رفتم : http://www.asphelps.com/GridView/How-to-Activate-and-Deactivate-User-in-GridView-in-Asp.net.aspx

اما خطای : Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index


رو از خط
string id = GridView1.DataKeys[e.NewSelectedIndex].Value.ToString();
می گیره ، کسی میتونه راهنماییم کنه ؟

mRizvandi
جمعه 29 فروردین 1393, 11:00 صبح
دقت کنید که حتما CommandName مربوط به ImageButton باید Select باشه و حتما DataKeyNames رو هم ست کرده باشید.

angel farahani
جمعه 29 فروردین 1393, 11:05 صبح
این دو کار رو انجام دادم ، خطایی دیگه نمی ده ، اما هیچ کاری هم نمیکنه . روی imagebutton فقط عکس inactive هست و با کلیک بر روش نه وضعیت عوض میشه نه تصویرش .

angel farahani
جمعه 29 فروردین 1393, 11:11 صبح
میخواید من کد هام رو بزارم ؟ من میدونم یک جایی از کدم رو اشتباه نوشتم ، ولی دقیق نمی دونم ، الان دیدم فیلد تایید مدیر اگر true باشه false میکنه اما true نمیکنه


protected void Page_Load(object sender, EventArgs e) {
if (Session["userid"] == null)
Response.Redirect("userlogin.aspx");
if (!IsPostBack)
GridView1.DataBind();
}


protected string approvefn(object o)
{
if(Convert.ToBoolean(o)==true)
{
return "تایید شده ";}


else
{
return "تایید نشده ";}
}

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{

if (e.Row.RowType == DataControlRowType.DataRow)
{
ImageButton img = (ImageButton)e.Row.FindControl("ApproveBtn");


if (e.Row.Cells[0].Text == "تایید شده ")
{
img.ImageUrl = "pictures/accept.png";
}
else
{
img.ImageUrl = "pictures/delete.png";
}
}

}
protected void GridView1_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
{
// id of edit row
string id = GridView1.DataKeys[e.NewSelectedIndex].Value.ToString();
string status = GridView1.Rows[e.NewSelectedIndex].Cells[0].Text;
Boolean s;
if (status == "تایید شده ")
{
s=true;
}
else
{
s=false;
}
// update record
String conString = ConfigurationManager.ConnectionStrings["OnlineResturansConnectionString"].ToString();


SqlConnection sqlcon = new SqlConnection(conString);


SqlCommand cmd = new SqlCommand("update usercomment set adminapprove='"+ s +"' where commentid="+ id + "",sqlcon);

sqlcon.Open();
cmd.ExecuteNonQuery();
sqlcon.Close();

GridView1.DataBind();
}

mRizvandi
جمعه 29 فروردین 1393, 15:39 عصر
فکر می کنم باید این خط رو عوض کنید. مقدار وضعیت رو که بدست آوردید باید Not اون رو ست کنید.


SqlCommand cmd = new SqlCommand("update usercomment set adminapprove='"+!s+"' where commentid="+ id + "",sqlcon);

angel farahani
جمعه 29 فروردین 1393, 20:45 عصر
سلام ، نه ایراد از این نیست ، الان تایید نکردن درست شد ، تایید کردن کار نمی کنه .


string status = GridView1.Rows[e.NewSelectedIndex].Cells[1].Text;

اندیس رو 1 کردم که این جواب رو داد ، حالا چیکار کنم که تایید کردن کار کنه !؟