PDA

View Full Version : سوال: حذف چند ردیف انتخابی در گریدویو



m.hamidreza
شنبه 08 تیر 1387, 11:23 صبح
من یه باتن Delete دارم و یه گریدویو، این کد در رویداد OnClick باتن هست :



string _C_No = "";
foreach (GridViewRow gridRow in gView1.Rows)
{
CheckBox chbxRmove = (CheckBox)gridRow.FindControl("CheckBx");
if (chbxRmove != null)
{
if (chbxRmove.Checked)
{
_C_No = gView1.DataKeys[gridRow.RowIndex].Value.ToString();
BLL.CallBack_BLL.DeleteRow_BLL(int.Parse(_C_No));
}
}
}
آی دی Checkbox هم در گریدویو همینه ولی هیچ وقت وارد شرط if دوم نمیشه! اگه چک باکس هارو بطور پیش فرض Checked کنم کار میکنه ولی در حالتی که بعد از لود چک بزنم نمیفهمه چک خورده !

Himalaya
شنبه 08 تیر 1387, 15:28 عصر
تو properties مربوط به checkboxهات قسمت Autopostback رو true کن

m.hamidreza
یک شنبه 09 تیر 1387, 10:44 صبح
مال این نیست عزیز برادر....

Himalaya
یک شنبه 09 تیر 1387, 13:09 عصر
آی دی Checkbox هم در گریدویو همینه ولی هیچ وقت وارد شرط if دوم نمیشه! اگه چک باکس هارو بطور پیش فرض Checked کنم کار میکنه ولی در حالتی که بعد از لود چک بزنم نمیفهمه چک خورده !
عزیز برادر یا این حرفو نزن(نقل قول) یا اگه میزنی مطمئن باش از همونیه که گفتم

yasak55
یک شنبه 09 تیر 1387, 14:20 عصر
سلام،
مطمئنی که توی Page_Load و هنگام databind کردن grid چک می کنی که Page.IsPosback = false باشه؟ وقتی صفحه post-back می شه نباید datagrid رو دوباره bind کرده باشی...

miladr
یک شنبه 09 تیر 1387, 15:33 عصر
اره درسته باید دستور bind دیتابیس رو تو if not page.ispostback بذاری و گرنه وقتی کاربر رو دکمه delete میزنه اول gridview دوباره bind میشه و بعد onclick فراخوانی میشه.

gheysar14
دوشنبه 10 تیر 1387, 13:26 عصر
من کد زیر را در رویداد کلیک باتون حذف برای delete کردن رکوردی که توسط چک باکس در گریدویو انتخاب شده نوشتم ولی ارور Unable to cast object of type 'System.Web.UI.WebControls.GridViewRow' to type 'System.Web.UI.WebControls.DataGridItem'. را میده






Dim boolCheck As Boolean
Dim idGroup As String = ""
Dim dgItem As DataGridItem
For Each dgItem In GridView1.Rows
Dim chk As New CheckBox
chk = dgItem.FindControl("chk")
If chk.Checked = True Then
boolCheck = True
idGroup += GridView1.DataKeys(dgItem.ItemIndex).ToString + ","
End If
If boolCheck = True Then
Dim da As New SqlDataAdapter()
Dim dt As New DataTable
Dim cmd As New SqlCommand("darya_DeleteNewsLetter")
cmd.Connection = objConnection
cmd.CommandType = CommandType.StoredProcedure
objConnection.Open()
da.InsertCommand = cmd
da.DeleteCommand.Parameters.AddWithValue("@NewsLetterId", idGroup.Substring(0, idGroup.LastIndexOf(",")))
da.SelectCommand = cmd
da.Fill(dt)
Response.Redirect("ArchiveNewsletter.aspx")
End If
Next
objConnection.Close()

miladr
دوشنبه 10 تیر 1387, 14:56 عصر
Dim dgItem As DataGridItem

رو به این تبدیل کن

Dim dgItem As GridViewRow

gheysar14
دوشنبه 10 تیر 1387, 15:41 عصر
این کاری که شما گفتین رو انجام دادم درست شد ولی حالا وقتی به خط
idGroup += GridView1.DataKeys(dgItem.RowIndex).Value + ","میرسه ارور Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index رو میده

gheysar14
سه شنبه 11 تیر 1387, 10:25 صبح
کسی نیست جواب بده؟

merlin_vista
سه شنبه 11 تیر 1387, 14:39 عصر
من یه باتن Delete دارم و یه گریدویو، این کد در رویداد OnClick باتن هست :



string _C_No = "";
foreach (GridViewRow gridRow in gView1.Rows)
{
CheckBox chbxRmove = (CheckBox)gridRow.FindControl("CheckBx");
if (chbxRmove != null)
{
if (chbxRmove.Checked)
{
_C_No = gView1.DataKeys[gridRow.RowIndex].Value.ToString();
BLL.CallBack_BLL.DeleteRow_BLL(int.Parse(_C_No));
}
}
}
آی دی Checkbox هم در گریدویو همینه ولی هیچ وقت وارد شرط if دوم نمیشه! اگه چک باکس هارو بطور پیش فرض Checked کنم کار میکنه ولی در حالتی که بعد از لود چک بزنم نمیفهمه چک خورده !

تست كردم درست جواب داد !! :متفکر::تشویق:

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrin gs["CString"].ToString());
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
bind();

}
}
private void bind()
{
SqlDataAdapter dat = new SqlDataAdapter("select * From tbl_user", con);
dat.SelectCommand.CommandType = CommandType.Text;
DataTable dt=new DataTable();
dat.Fill(dt);
this.GridView1.DataSource = dt;
this.GridView1.DataBind();

}
protected void Button1_Click(object sender, EventArgs e)
{
string _C_No = "";
foreach (GridViewRow gridRow in this.GridView1.Rows)
{
CheckBox chbxRmove = (CheckBox)gridRow.FindControl("CheckBx");
if (chbxRmove != null)
{
if (chbxRmove.Checked==true)
{
_C_No = this.GridView1.DataKeys[gridRow.RowIndex].Value.ToString();
//Delete Row :
SqlCommand cmd=new SqlCommand("delete from tbl_user where id=@id",con);
cmd.Parameters.AddWithValue("@id", int.Parse(_C_No));
con.Open();
cmd.ExecuteNonQuery();
con.Close();
//
}
}
}
bind();
}
protected void Button2_Click(object sender, EventArgs e)
{
Button1_Click(null, null);
}