PDA

View Full Version : سوال: انتخاب رکورد گرید ویو با چک باکس و انجام عمل خاص



Saman Ice
جمعه 05 خرداد 1391, 21:37 عصر
سلام
من میخوام با استفاده از چک باکسی که به گرید ویو اضافه کردم چند رکورد رو انتخاب کنم و اعمال همچون حذف و اضافه کردن(فقط یه ستون رو به جدول دیگه) انجام بدم

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

protected void Button1_Click(object sender, EventArgs e)
{

foreach (GridViewRow row in GridView1.Rows)
{
CheckBox cb = (CheckBox)row.FindControl("checkbox");
if (cb != null && cb.Checked)
{
conn.Open();
string id = (GridView1.DataKeys[row.RowIndex]["id"].ToString());
SqlCommand cmd = new SqlCommand("delete from lesson where id=" + id, conn);
cmd.ExecuteNonQuery();
DataBind();
}
}
}
protected void BindData()
{
SqlDataAdapter da = new SqlDataAdapter("select * from lesson", conn);
DataSet ds = new DataSet();
da.Fill(ds);
GridView1.DataSource = ds;
GridView1.DataBind();
conn.Close();
}

ولی این کد در خط
string id = (GridView1.DataKeys[row.RowIndex]["id"].ToString());
خطای زیر رو میده
Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index

لطفا کمکم کنید چطوری چنتا رکورد رو با چک باکس انتخاب کنم و اونارو حذف یا به جدول دیگه اضافه کنم

ممنون

fakhravari
جمعه 05 خرداد 1391, 21:56 عصر
private void BindGrid()
{
using (SqlConnection Con = new SqlConnection(ConfigurationManager.ConnectionStrin gs["ConStr"].ConnectionString))
{

using (SqlCommand Cmd = new SqlCommand("FetchData", Con))
{
Cmd.CommandType = CommandType.StoredProcedure;
Con.Open();
SqlDataReader Dr = Cmd.ExecuteReader();

GridView1.DataSource = Dr;
GridView1.DataBind();
Dr.Close();
Con.Close();
}
}
}
private void RemoveData(string RowID)
{

using (SqlConnection Con = new SqlConnection(ConfigurationManager.ConnectionStrin gs["ConStr"].ConnectionString))
{

using (SqlCommand Cmd = new SqlCommand("RemoveData", Con))
{
Cmd.CommandType = CommandType.StoredProcedure;
Cmd.Parameters.AddWithValue("@MsgID", RowID);
Con.Open();
Cmd.ExecuteNonQuery();
Con.Close();
}
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{

BindGrid();
}
}
protected void Delete_Click(object sender, EventArgs e)
{
string RowID = "";

foreach (GridViewRow myrow in GridView1.Rows)
{

CheckBox ChkSelect = (CheckBox)myrow.Cells[0].FindControl("ChkSelect");
if (ChkSelect.Checked)
RowID += GridView1.DataKeys[myrow.RowIndex].Value.ToString() + ",";
}

if (RowID.Length != 0)
RowID = RowID.Remove(RowID.Length - 1);

RemoveData(RowID);
BindGrid();
}

Saman Ice
جمعه 05 خرداد 1391, 22:49 عصر
خطا برای این خط
SqlConnection Con = new SqlConnection(ConfigurationManager.ConnectionStrin gs["ConStr"].ConnectionString)

fakhravari
جمعه 05 خرداد 1391, 23:25 عصر
عزیز اون رشته اتصال ConStr که از کنفیگ میخونه
همون conn خودت

Saman Ice
جمعه 05 خرداد 1391, 23:56 عصر
نشد
اونم درست میکنم به سطر بعدی گیر میده

Saman Ice
شنبه 06 خرداد 1391, 00:33 صبح
مشکل حل شد
خیلی راحتر از اون چیزی بود که فکرشو میکردم. یکم اعتماد به نفس داشته باشم خودم یپا مخم:قهقهه:

fakhravari
شنبه 06 خرداد 1391, 00:38 صبح
اره معلوم :بامزه:

Saman Ice
شنبه 06 خرداد 1391, 00:57 صبح
فقط یه مشکل دیگه پسرخاله
اینو ببین
protected void Button1_Click(object sender, EventArgs e)
{
StringCollection idCollection = new StringCollection();
string strID = string.Empty;
for (int i = 0; i < GridView1.Rows.Count; i++)
{
CheckBox chkDelete = (CheckBox)GridView1.Rows[i].Cells[0].FindControl("checkbox");
if (chkDelete != null)
{
if (chkDelete.Checked)
{
strID = (GridView1.Rows[i].Cells[1].Text).ToString();
idCollection.Add(strID);
}

}
}
SqlConnection conn = new SqlConnection("Data Source=saman-pc;Initial Catalog=University;Integrated Security=True");
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
string qeury = "INSERT INTO selectunits ([studentid],[lessonid],[term]) VALUES ('" + idnum.Text + "' , '" + strID + "','" + login.Text + "')";
cmd.CommandText = qeury;
cmd.ExecuteNonQuery();
conn.Close();

// rebind the GridView
GridView1.DataBind();
}

فقط رکورد اخر رو ثبت میکنه
یه حلقه براش گذاشتم ولی جواب نداد و باعث شد هر رکورد 2بار ثبت بشه(2تا رکورد دارم فعلا، وقتی تک تک انتخاب میکنم 2بار ثبت میشه ولی 2تارو باهم انتخاب کردنی درست ثبت میکنه)

Saman Ice
شنبه 06 خرداد 1391, 01:10 صبح
این نیز حل شد