Как я могу удалить выбранные данные из сетки на событие нажатия кнопки? - PullRequest
1 голос
/ 19 мая 2011

У меня есть сетка на моей странице, и я использую флажок для проверки одной или нескольких строк в сетке, и я хочу удалить отмеченную строку из сетки по нажатию кнопки удаления, которая находится вне сетки ..

В таблице у меня есть только поле имени, нет поля с идентификатором.

Как удалить запись.

Заранее спасибо ..

Вот мой кодЧто я делаю: -

private void GetData()
{

    ArrayList arr;
    if (ViewState["TotalRecords"] != null)
    {
        arr = (ArrayList)ViewState["TotalRecords"];
    }
    else
    {
        arr = new ArrayList();
    }
    for (int i = 0; i < grdlistWord.Rows.Count; i++)
    {

        CheckBox chk = (CheckBox)grdlistWord.Rows[i].Cells[1].FindControl("chkWord");
        if (chk.Checked)
        {
            if (!arr.Contains(grdlistWord.Rows[i].Cells[1]))
            {
                arr.Add(grdlistWord.Rows[i].Cells[1]);
            }
        }
        else
        {
            if (arr.Contains(grdlistWord.Rows[i].Cells[1]))
            {
                arr.Remove(grdlistWord.Rows[i].Cells[1]);
            }
        }

    }
    ViewState["TotalRecords"] = arr;
}

protected void lnkbtnDelete_Click(object sender, EventArgs e)
{

    try
    {
        int count = 0;

        ArrayList arr = (ArrayList)ViewState["TotalRecords"];
        count = arr.Count;
        for (int i = 0; i < grdlistWord.Rows.Count; i++)
        {
            if (arr.Contains(grdlistWord.Rows[i].Cells[1].Text))
            {
                Response.Write(grdlistWord.Rows[i].Cells[1].Text.ToString());
                DeleteRecord(grdlistWord.Rows[i].Cells[1].Text.ToString());
                arr.Remove(grdlistWord.Rows[i].Cells[1].Text);
            }
        }
        ViewState["TotalRecords"] = arr;
        GridBind();

    }
    catch (SqlException ex)
    {
        ex.ToString();
    }

}


private void DeleteRecord(string word)
{

    string query = "delete from searchword where word=@word";

    SqlCommand cmd = new SqlCommand(query, con);
    cmd.Parameters.AddWithValue("@word", word);
    con.Open();
    cmd.ExecuteNonQuery();
    con.Close();
}

gridview html detail:

 <fieldset>
        <legend>List</legend>
        <asp:GridView ID="grdlistWord" runat="server" DataKeyNames="word" AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" GridLines="None" AllowPaging="True" OnRowDataBound="grdlistWord_RowDataBound" OnRowDeleting="grdlistWord_RowDeleting">
            <Columns>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:CheckBox ID="chkWord" runat="server" onclick="check_click(this);" />

                    </ItemTemplate>
                    <HeaderTemplate>
                        <asp:CheckBox ID="chkAll" runat="server" onclick="checkAll(this);" />
                        <asp:LinkButton ID="ButtonDelete" runat="server" Text="Delete" OnClick="ButtonDelete_Click"></asp:LinkButton>
                    </HeaderTemplate>
                </asp:TemplateField>
                <asp:BoundField DataField="Word" HeaderText="Word" />
                <asp:HyperLinkField HeaderText="Edit" Text="edit" DataNavigateUrlFields="Word" DataNavigateUrlFormatString="SearchWord.aspx?words={0}&amp;mode=Edit" />
                <asp:CommandField ShowDeleteButton="True" HeaderText="Delete" />
            </Columns>
            <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
            <EditRowStyle BackColor="#999999" />
            <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
            <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
            <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
            <EmptyDataTemplate>Records not exist!</EmptyDataTemplate>
        </asp:GridView>

        <asp:HiddenField ID="hfCount" runat="server" Value = "0" />

    </fieldset>

Ответы [ 2 ]

1 голос
/ 23 мая 2011
 protected void lnkbtnDelete_Click(object sender, EventArgs e)
        {

            int counter = 0;
            List<string> words = new List<string>();
            foreach (GridViewRow rowitem in grdlistWord.Rows)
            {
                if (((CheckBox)rowitem.Cells[0].FindControl("chkWord")).Checked == true)//i consider that the check box is in the first column index ---> 0
                {
                    counter++;
                    words.Add(rowitem.Cells[1].Text); //i consider that the word is in the second column index ---> 1
                }
            }
            /////////////////////////////////////////////////////////////
            if(counter == 0) //no checks
            {

             //show some message box to clarify that no row has been selected.

            }
            /////////////////////////////////////////////////////////////
            if (counter == 1) //one check
            {

                DeleteRecord(words[0]);
                //Show some message box to clarify that the operation has been executed successfully.

            }
            /////////////////////////////////////////////////////////////
            if (counter > 1) //more than one check
            {
                for(int i=0; i<words.Count;i++)
                   {
                     DeleteRecord(words[i]);
                   }
                   //Show some message box to clarify that the operation has been executed successfully.
            }

            grdlistWord.DataBind();
        }
1 голос
/ 19 мая 2011

Для этого вы сначала задали идентификатор первичного ключа в своей таблице, который выбираете в качестве источника таблицы.

После привязки сетки вы должны сохранить этот идентификатор в скрытом поле. см. код ниже:

       <asp:GridView ID="gvwID" runat="server" AutoGenerateColumns="False"
                    DataKeyNames="TableID">
           <Columns>
                <asp:TemplateField>
                     <asp:HiddenField ID="HiddenField1" runat="server" Value='<%# Eval("TableID") %>'/>
                 <asp:TemplateField>
           </Columns>
       </asp:GridView>

Затем в событии нажатия кнопки удаления получить идентификаторы выбранной строки:

        protected void Btn_Click(object sender, EventArgs e)
        {
                int[] OrderIDList = new int[gvwID.Rows.Count];

                int index = 0;

                 for (int count = 0; count < gvwID.Rows.Count; count++)
                 {
                   if (gvwID.Rows[count].FindControl("chkSelect") != null)
                    {
                       if (((CheckBox)gvwID.Rows[count].FindControl("chkSelect")).Checked)
                       {
                            if (gvwID.Rows[count].FindControl("HiddenField1") != null)
                            {
                            string OrderID = ((HiddenField)gvwID.Rows[count].FindControl("HiddenField1")).Value;
                        OrderIDList[index++] = Convret.ToInt32(OrderID);
                             }
                        }
                   }
        }

Затем создайте добавленную строку из OrderIDList и передайте ее хранимой процедуре. из хранимой процедуры создайте xml, используя добавленную строку. Прокрутите xml, получите каждый идентификатор и выполните удаление.

см. Процедуру ниже:

              @IDList varchar(MAX)

            DECLARE @xmlUserIDs xml
    SELECT @xmlUserIDs = CONVERT(xml,'<root><cat>' +  REPLACE(@IDList,',','</cat><cat>') + '</cat></root>')// creates xml from appended string

    DELETE FROM  
        [TableName]
    WHERE 
    [TableID] IN (SELECT 
                    [Value] = T.C.value('.','int') 
                  FROM 
                    @xmlUserIDs.nodes('/root/cat') T(C));

Надеюсь, это поможет вам ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...