none
.Net GridView Checbox ile seçilen satırları silme hata veriyor bi bakabilirmisiniz ? RRS feed

  • Soru


  •         protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
            {

    SqlConnection conn = new SqlConnection(@"Data Source=.;Initial Catalog=Uyelik;Integrated Security=True; Asynchronous Processing=true"); string silinecekler = ""; foreach (GridViewRow satirbilgi in GridView1.Rows) { CheckBox chk = (CheckBox)satirbilgi.FindControl("chksec"); if (chk != null & chk.Checked) { silinecekler += satirbilgi.Cells[0].Text + ","; } } conn.Open(); string komut = "DELETE * FROM dbo.aspnet_Iletisim where ID in (" + silinecekler.Remove(silinecekler.Length - 1, 1) + ")"; SqlCommand cmd = new SqlCommand(); cmd = new SqlCommand(komut, conn); cmd.ExecuteNonQuery(); cmd.Connection.Close(); GridDoldur();

    }



    kod bu çalıştırıp grid den checboxları seçtiğimde sil dediğimde executenonquery de patlıyor "Incorrect syntax near '*'."

    kaynak = http://www.aspnetornekleri.com/gridview-ornekleri/asp-net-gridview-checkbox-ile-secilen-satirlari-silme-coklu-silme.html
    • Düzenleyen ByAvora 31 Mayıs 2014 Cumartesi 20:52
    31 Mayıs 2014 Cumartesi 20:51

Yanıtlar

  • Tabii daha ideal yontemler var. Ornekler icin buraya bak:

    http://social.msdn.microsoft.com/Forums/tr-TR/8e61011d-e4b3-443e-af5d-fbec6a96d9e3/yazdgm-fonksiyona-parametre-gonderiminde-in-datalarn-nasl-gndermeliyim?forum=sqltr

    Oradan ornek bir kodun sana uyarlanmis sekli:

           protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
            {
                StringBuilder sb = new StringBuilder();
                sb.AppendLine(@"declare @cXML varchar(4000), @NodeName varchar(100);");
                sb.AppendLine(@"set @cXML = '<IdList>");
    
    
    
    
                foreach (GridViewRow satirbilgi in GridView1.Rows)
                {
                    CheckBox chk = (CheckBox)satirbilgi.FindControl("chksec");
                    if (chk != null & chk.Checked)
                    {
                	   sb.AppendLine( string.Format(@"<Id id=""{0}"">", satirbilgi.Cells[0].Text) );
                    }
                }
    
                sb.AppendLine(
    @"</IdList>';
    set @NodeName = '/IdList/Id';
    
    -- XML'den Idleri tabloya cevir
    DECLARE @hDoc int;
    exec sp_xml_preparedocument @hDoc OUTPUT, @cXML;
    
    Delete FROM [dbo.aspnet_Iletisim]
    WHERE ID IN 
    (
    	SELECT id FROM OPENXML(@hDoc, @Nodename, 1) WITH (id int)
    );
    
    EXEC sp_xml_removedocument @hDoc;"
    );
    
    
           using(SqlConnection conn = new SqlConnection(@"Data Source=.;Initial Catalog=Uyelik;Integrated Security=True; Asynchronous Processing=true"))
           {
               conn.Open();
               string komut = sb.ToString();
               SqlCommand cmd = new SqlCommand(komut, conn);
    
                cmd.ExecuteNonQuery();
                cmd.Connection.Close();
           }
                GridDoldur();
    }



    • Düzenleyen CetinBasoz 31 Mayıs 2014 Cumartesi 21:12
    • Yanıt Olarak İşaretleyen Özgür Tekbaş 6 Haziran 2014 Cuma 09:26
    31 Mayıs 2014 Cumartesi 21:10

Tüm Yanıtlar

  • string komut = "DELETE FROM dbo.aspnet_Iletisim where ID in (" + silinecekler.Remove(silinecekler.Length - 1, 1) + ")";

    31 Mayıs 2014 Cumartesi 20:56
  • Tabii daha ideal yontemler var. Ornekler icin buraya bak:

    http://social.msdn.microsoft.com/Forums/tr-TR/8e61011d-e4b3-443e-af5d-fbec6a96d9e3/yazdgm-fonksiyona-parametre-gonderiminde-in-datalarn-nasl-gndermeliyim?forum=sqltr

    Oradan ornek bir kodun sana uyarlanmis sekli:

           protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
            {
                StringBuilder sb = new StringBuilder();
                sb.AppendLine(@"declare @cXML varchar(4000), @NodeName varchar(100);");
                sb.AppendLine(@"set @cXML = '<IdList>");
    
    
    
    
                foreach (GridViewRow satirbilgi in GridView1.Rows)
                {
                    CheckBox chk = (CheckBox)satirbilgi.FindControl("chksec");
                    if (chk != null & chk.Checked)
                    {
                	   sb.AppendLine( string.Format(@"<Id id=""{0}"">", satirbilgi.Cells[0].Text) );
                    }
                }
    
                sb.AppendLine(
    @"</IdList>';
    set @NodeName = '/IdList/Id';
    
    -- XML'den Idleri tabloya cevir
    DECLARE @hDoc int;
    exec sp_xml_preparedocument @hDoc OUTPUT, @cXML;
    
    Delete FROM [dbo.aspnet_Iletisim]
    WHERE ID IN 
    (
    	SELECT id FROM OPENXML(@hDoc, @Nodename, 1) WITH (id int)
    );
    
    EXEC sp_xml_removedocument @hDoc;"
    );
    
    
           using(SqlConnection conn = new SqlConnection(@"Data Source=.;Initial Catalog=Uyelik;Integrated Security=True; Asynchronous Processing=true"))
           {
               conn.Open();
               string komut = sb.ToString();
               SqlCommand cmd = new SqlCommand(komut, conn);
    
                cmd.ExecuteNonQuery();
                cmd.Connection.Close();
           }
                GridDoldur();
    }



    • Düzenleyen CetinBasoz 31 Mayıs 2014 Cumartesi 21:12
    • Yanıt Olarak İşaretleyen Özgür Tekbaş 6 Haziran 2014 Cuma 09:26
    31 Mayıs 2014 Cumartesi 21:10
  • Tabii daha ideal yontemler var. Ornekler icin buraya bak:

    http://social.msdn.microsoft.com/Forums/tr-TR/8e61011d-e4b3-443e-af5d-fbec6a96d9e3/yazdgm-fonksiyona-parametre-gonderiminde-in-datalarn-nasl-gndermeliyim?forum=sqltr

    Oradan ornek bir kodun sana uyarlanmis sekli:

           protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
            {
                StringBuilder sb = new StringBuilder();
                sb.AppendLine(@"declare @cXML varchar(4000), @NodeName varchar(100);");
                sb.AppendLine(@"set @cXML = '<IdList>");
    
    
    
    
                foreach (GridViewRow satirbilgi in GridView1.Rows)
                {
                    CheckBox chk = (CheckBox)satirbilgi.FindControl("chksec");
                    if (chk != null & chk.Checked)
                    {
                	   sb.AppendLine( string.Format(@"<Id id=""{0}"">", satirbilgi.Cells[0].Text) );
                    }
                }
    
                sb.AppendLine(
    @"</IdList>';
    set @NodeName = '/IdList/Id';
    
    -- XML'den Idleri tabloya cevir
    DECLARE @hDoc int;
    exec sp_xml_preparedocument @hDoc OUTPUT, @cXML;
    
    Delete FROM [dbo.aspnet_Iletisim]
    WHERE ID IN 
    (
    	SELECT id FROM OPENXML(@hDoc, @Nodename, 1) WITH (id int)
    );
    
    EXEC sp_xml_removedocument @hDoc;"
    );
    
    
           using(SqlConnection conn = new SqlConnection(@"Data Source=.;Initial Catalog=Uyelik;Integrated Security=True; Asynchronous Processing=true"))
           {
               conn.Open();
               string komut = sb.ToString();
               SqlCommand cmd = new SqlCommand(komut, conn);
    
                cmd.ExecuteNonQuery();
                cmd.Connection.Close();
           }
                GridDoldur();
    }



     Merhaba, sizin kodunuz patlıyor malesef, :(

     Benim kod çalıştı, tabi ama bir iki bişi daha ekliyim dedim yine hata aldım,

    nerde yanlış ?

            protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
            {
                //int id = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Values[0]);
                //SqlConnection conn = new SqlConnection(@"Data Source=.;Initial Catalog=Uyelik;Integrated Security=True;  Asynchronous Processing=true");
                //conn.Open();
                //SqlCommand command = new SqlCommand(@"UPDATE dbo.aspnet_Iletisim SET ID=1 where ID ='" + id.ToString() + "'", conn);
                //command.ExecuteReader();
    
                //GridDoldur();
    
                SqlConnection conn = new SqlConnection(@"Data Source=.;Initial Catalog=Uyelik;Integrated Security=True; Asynchronous Processing=true");
                string silinecekler = "";
                foreach (GridViewRow satirbilgi in GridView1.Rows)
                {
                    CheckBox chk = (CheckBox)satirbilgi.FindControl("chksec");
                    if (chk != null & chk.Checked)
                    {
                        silinecekler += satirbilgi.Cells[0].Text + ",";
                    }
                }
                conn.Open();
                string komut = "DELETE FROM dbo.aspnet_Iletisim where ID in (" + silinecekler.Remove(silinecekler.Length - 1, 1) + ")";
                SqlCommand cmd = new SqlCommand();
                cmd = new SqlCommand(komut, conn);
    
                cmd.ExecuteNonQuery();
                cmd.Connection.Close();
                GridDoldur();
            }
    
            protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                if (e.Row.RowType == DataControlRowType.Header)
                {
                    //Find the checkbox control in header and add an attribute
                    ((CheckBox)e.Row.FindControl("chksec")).Attributes.Add("onclick", "javascript:SelectAll('" + ((CheckBox)e.Row.FindControl("chksec")).ClientID + "')");
                }
            }
    
        }

     Nerde yanlış yapıyorum ? gridimde bu,

    <asp:GridView ID="GridView1" BackColor="WhiteSmoke" runat="server" AutoGenerateColumns="False"
                    GridLines="Vertical" CssClass="grid-view" OnRowCreated="GridView1_RowCreated" DataKeyNames="ID" OnRowDeleting="GridView1_RowDeleting" BorderStyle="Solid" BorderWidth="1px" HorizontalAlign="Center" OnRowDataBound="GridView1_RowDataBound">
                    <Columns>
                        <asp:TemplateField>
                            <ItemTemplate>
                                <asp:CheckBox ID="chksec" runat="server" />
                            </ItemTemplate>
                            <HeaderTemplate>
                                <asp:CheckBox ID="chksec" runat="server" />
                            </HeaderTemplate>
                            <HeaderStyle BorderStyle="Solid" BorderWidth="1" />
                            <ItemStyle BorderStyle="Solid" BorderWidth="1" VerticalAlign="Middle" />
                        </asp:TemplateField>
                        <asp:BoundField HeaderText="ID" DataField="ID" SortExpression="id">
                            <HeaderStyle Width="30px" BorderStyle="Solid" BorderWidth="1" />
                            <ItemStyle Width="30px" BorderStyle="Solid" BorderWidth="1" />
                        </asp:BoundField>
                        <asp:BoundField HeaderText="Konu" DataField="Konu">
                            <HeaderStyle Width="150px" BorderStyle="Solid" BorderWidth="1" />
                            <ItemStyle Width="150px" BorderStyle="Solid" BorderWidth="1" />
                        </asp:BoundField>
                        <asp:BoundField HeaderText="Mesaj" DataField="Mesaj">
                            <HeaderStyle Width="700px" BorderStyle="Solid" BorderWidth="1" />
                            <ItemStyle Width="700px" BorderStyle="Solid" BorderWidth="1" />
                        </asp:BoundField>
                        <asp:BoundField HeaderText="E-Mail" DataField="E_Mail">
                            <HeaderStyle Width="200px" BorderStyle="Solid" BorderWidth="1" />
                            <ItemStyle Width="200px" BorderStyle="Solid" BorderWidth="1" />
                        </asp:BoundField>
                        
                        <asp:CommandField ButtonType="Image" DeleteImageUrl="~/images/icon/delete-icon2.png" ShowDeleteButton="True" />
                        
                    </Columns>
                </asp:GridView>

    buda databoundun scripti,

    <script type="text/javascript">
        function SelectAll(id) {
            var grid = document.getElementById("<%= GridView1.ClientID %>");
                var cell;
    
                if (grid.rows.length > 0) {
                    for (i = 1; i < grid.rows.length; i++) {
                        cell = grid.rows[i].cells[0];
    
                        for (j = 0; j < cell.childNodes.length; j++) {           
                            if (cell.childNodes[j].type == "checkbox") {
                                cell.childNodes[j].checked = document.getElementById(id).checked;
                            }
                        }
                    }
                }
            }
        </script>

    Hata Mesajı Bu = 

    Incorrect syntax near ','.

    1 Haziran 2014 Pazar 17:05
  • Gerek Kalmadı Buldum Hatayı :D
    1 Haziran 2014 Pazar 17:15
  • bir sıkıntı çıktı :D,

    kullanıcı checkbox seçmeden sil'e basarsa sayfa patlıyor, nasıl kullanıcıya seçim yapmadan silemezsiniz diye uyarı verdirebilirim. ?

    1 Haziran 2014 Pazar 17:44
  • Conn.Open(),string komut="Delete..." ve altındaki kod bloklarını foreach içindeki checkbox.Checked ın altına yapıştırın. Sorun hallolur.
    1 Haziran 2014 Pazar 20:39
  • "patliyor" diyenlere de hastayim, her ne demekse :)
    1 Haziran 2014 Pazar 22:21
  • bir sıkıntı çıktı :D,

    kullanıcı checkbox seçmeden sil'e basarsa sayfa patlıyor, nasıl kullanıcıya seçim yapmadan silemezsiniz diye uyarı verdirebilirim. ?

    CheckBox'ın seçili olup olamdığına bakabilirsiniz.

    if(checkbox1.Checked)
    {
    //İşlemler
    }
    else
    {
    //Hata mesajı.
    }


    İletişim

    2 Haziran 2014 Pazartesi 05:49
    Moderatör
  • Conn.Open(),string komut="Delete..." ve altındaki kod bloklarını foreach içindeki checkbox.Checked ın altına yapıştırın. Sorun hallolur.
     Birden Fazla CheckBox var, gridview'in içinde checkbox yerleştirdim, seçili satırı siliyor, veya 1 den fazla checkbox seçtiğinde, foreach içine alınca tek tek mesaj verdirio her satır için ?
    2 Haziran 2014 Pazartesi 16:55
  • Onun içinde bir bool değer atın. Başlangıç değeri false olsun. Mesaj yazdırın. True yapın. Böylece sorun kalmaz.

    bool mesajYazdikMi=false;
    if(!mesajYazdikMi)
    {
    mesajYazdikMi=true;
    MessageBox.Show("Mesajınız");
    }

    2 Haziran 2014 Pazartesi 19:43