LuciusAvette Ответов: 1

Удаление выбранной строки из gridview больше не работает?


Всем привет.

Мой текущий код удаления работавший в таблице Gridview, но больше нет, после того как я запихнул ее в Панель обновления.

В основном пользователи выбирают одну или несколько строк с помощью флажка, а затем выбранные строки удаляются при нажатии кнопки.

Это мой код aspx;
<asp:UpdatePanel ID="upl" runat="server">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="btnSearch" EventName="serverclick" />
        <asp:AsyncPostBackTrigger ControlID="GvGrade" />
    </Triggers>
    <ContentTemplate>
        <asp:GridView ID="GvGrade" runat="server" AutoGenerateColumns="false" ClientIDMode="Static">
            <Columns>
                <asp:TemplateField HeaderText="Task ID" HeaderStyle-HorizontalAlign="Center">
                    <HeaderStyle Width="100" BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                    <ItemStyle HorizontalAlign="Center" />
                    <ItemTemplate>
                        <asp:Label ID="lblID" CssClass="lblID" runat="server" Text='<%# Eval("drug_id") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            <Columns>
                <asp:TemplateField HeaderText="Drug Name" HeaderStyle-HorizontalAlign="Center">
                    <HeaderStyle Width="300" BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                    <ItemStyle HorizontalAlign="Center" />
                    <ItemTemplate>
                        <asp:Label ID="lblDrugName" CssClass="lblImageName" runat="server" Text='<%# Eval("drug_name") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            <Columns>
                <asp:TemplateField HeaderText="Drug Description" HeaderStyle-HorizontalAlign="Center">
                    <HeaderStyle Width="500" BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                    <ItemStyle HorizontalAlign="Center" />
                    <ItemTemplate>
                        <asp:Label ID="lblDrugDescription" CssClass="lblImage" runat="server" Text='<%# Eval("drug_description") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            <Columns>
                <asp:TemplateField HeaderText="Task Status" HeaderStyle-HorizontalAlign="Center">
                    <HeaderStyle Width="200" BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                    <ItemStyle HorizontalAlign="Center" />
                    <ItemTemplate>
                        <asp:Label ID="lblTaskStatus" CssClass="lblImage" runat="server" Text='<%# Eval("task_status") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            <Columns>
                <asp:TemplateField HeaderText="Task Type" HeaderStyle-HorizontalAlign="Center">
                    <HeaderStyle Width="100" BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                    <ItemStyle HorizontalAlign="Center" />
                    <ItemTemplate>
                        <asp:Label ID="lblTaskType" CssClass="lblImage" runat="server" Text='<%# Eval("task_type") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            <Columns>
                <asp:TemplateField HeaderText="Delete Tasks" ItemStyle-Width="100px" ItemStyle-HorizontalAlign="Center">
                    <HeaderStyle Width="100" BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                    <ItemStyle HorizontalAlign="Center" />
                    <ItemTemplate>
                        <asp:CheckBox ID="chkbox" runat="server" onclick="javascript:HighlightRow(this);" />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
    </ContentTemplate>
</asp:UpdatePanel>


И код-за;
protected void showData()
{
    SqlDataAdapter da = new SqlDataAdapter("select * from Drug", con);
    DataSet ds = new DataSet();
    da.Fill(ds);
    GvGrade.DataSource = ds;
    GvGrade.DataBind();
}


protected void DeleteRecord(string drug_name)
{
    SqlConnection con = new SqlConnection(cs);
    SqlCommand com = new SqlCommand("delete from Drug where drug_name=@ID", con);
    com.Parameters.AddWithValue("@ID", drug_name);
    con.Open();
    com.ExecuteNonQuery();
    con.Close();
}

protected void BtnLogin_Click(object sender, EventArgs e)
{
    foreach (GridViewRow grow in GvGrade.Rows)
    {
        CheckBox chkbox = (CheckBox)grow.FindControl("chkbox");
        if (chkbox.Checked)
        {
            string drug_name = grow.Cells[1].Text;
            DeleteRecord(drug_name);
        }
    }
    //Displaying the Data in GridView
    showData();
}


Что я уже пробовал:

Я погуглил и прочитал что-то о повторной привязке таблицы после обратной отправки кнопки, но я не думаю, что это проблема. Я также попытался обновить панель в коде с помощью upl. Update, но она по-прежнему не работает. Что здесь происходит?

Karthik_Mahalingam

где находится кнопка удаления?

LuciusAvette

Моя вина. Кнопка Удалить находится за пределами панели обновления.


<!-- Кнопка -->

&ЛТ;АСП:кнопка ID="BtnRegister" атрибут runat="сервер" класс="БТН БТН-инфо" текст="удалить" функция onclick="BtnLogin_Click" /&ГТ;

Karthik_Mahalingam

поместите его внутрь и попробуйте

LuciusAvette

Привет, Картик, поместить его внутрь не получится.

Даже если я специально создам новую колонку с

<asp:PostBackTrigger ControlID= "BtnRegister" />

он показывает ошибку "элемент управления с идентификатором 'BtnRegister' не может быть найден для триггера в UpdatePanel 'upl'".

Karthik_Mahalingam

поместите его внутри ContentTemplate

LuciusAvette

Да, я тоже так делал. Это та же самая проблема.

Karthik_Mahalingam

пробовать
asp:AsyncPostBackTrigger

LuciusAvette

Используя AsyncPostBackTrigger, я мог видеть, как срабатывает PostBack, но не тогда, когда я использую PostBackTrigger. Но и то и другое тоже не работает.

Karthik_Mahalingam

в чем смысл слова "не работает"?
не увольняете мероприятие?

LuciusAvette

Поместив кнопку внутри ContentTemplate, как вы сказали,
AsyncPostBackTrigger = обратно после пожаров.
PostBackTrigger = нет обратного сообщения.

Не работает = невозможно удалить выбранную строку с помощью флажка.

Без UpdatePanel я могу удалять строки. Но теперь, когда я использую UpdatePanel, удаление больше не работает.

Karthik_Mahalingam

затем используйте AsyncPostBackTrigger

я проверил его, работает нормально.

LuciusAvette

Но удалить выбранную строку все равно не получится. Это главная проблема :/

Karthik_Mahalingam

показать код загрузки страницы

LuciusAvette

protected void Page_Load(отправитель объекта, EventArgs e)
{
if (! IsPostBack)
{
showData();
BtnRegister.Атрибуты.Add ("onclick", " javascript:return DeleteConfirm()");
}

если (преобразовать.ToString(Session ["role"]) = = " Member")
{
Ответ.Перенаправление ("LoginRedirect. aspx");
вернуть;
}
}

Karthik_Mahalingam

выглядеть нормально

LuciusAvette

Да, все в порядке. Я могу удалять строки без использования UpdatePanel. Но если я это сделаю, то не смогу удалить. Не знаю почему.

Karthik_Mahalingam

это то, что я пробовал

  
        <asp:ScriptManager ID="ScriptManager1" runat="server">
      <asp:UpdatePanel ID="upl" runat="server">
         
    <triggers>
        
        <asp:AsyncPostBackTrigger ControlID="GvGrade" />
           <asp:AsyncPostBackTrigger ControlID="BtnRegister" />
    
    <contenttemplate>
        <asp:Button ID="BtnRegister" runat="server" class="btn btn-info" Text="Delete" OnClick="BtnLogin_Click" />


        <asp:GridView ID="GvGrade" runat="server" AutoGenerateColumns="false" ClientIDMode="Static">
            <columns>
                <asp:TemplateField HeaderText="Task ID" HeaderStyle-HorizontalAlign="Center">
                    <HeaderStyle Width="100" BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                    <ItemStyle HorizontalAlign="Center" />
                    <itemtemplate>
                        <asp:Label ID="lblID" CssClass="lblID" runat="server" Text='<%# Eval("drug_id") %>'>
                    
                
            
            <columns>
                <asp:TemplateField HeaderText="Drug Name" HeaderStyle-HorizontalAlign="Center">
                    <HeaderStyle Width="300" BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                    <ItemStyle HorizontalAlign="Center" />
                    <itemtemplate>
                        <asp:Label ID="lblDrugName" CssClass="lblImageName" runat="server" Text='<%# Eval("drug_name") %>'>
                    
                
            
            <columns>
                <asp:TemplateField HeaderText="Drug Description" HeaderStyle-HorizontalAlign="Center">
                    <HeaderStyle Width="500" BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                    <ItemStyle HorizontalAlign="Center" />
                    <itemtemplate>
                        <asp:Label ID="lblDrugDescription" CssClass="lblImage" runat="server" Text='<%# Eval("drug_description") %>'>
                    
                
            
            <columns>
                <asp:TemplateField HeaderText="Task Status" HeaderStyle-HorizontalAlign="Center">
                    <HeaderStyle Width="200" BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                    <ItemStyle HorizontalAlign="Center" />
                    <itemtemplate>
                        <asp:Label ID="lblTaskStatus" CssClass="lblImage" runat="server" Text='<%# Eval("task_status") %>'>
                    
                
            
            <columns>
                <asp:TemplateField HeaderText="Task Type" HeaderStyle-HorizontalAlign="Center">
                    <HeaderStyle Width="100" BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                    <ItemStyle HorizontalAlign="Center" />
                    <itemtemplate>
                        <asp:Label ID="lblTaskType" CssClass="lblImage" runat="server" Text='<%# Eval("task_type") %>'>
                    
                
            
            <columns>
                <asp:TemplateField HeaderText="Delete Tasks" ItemStyle-Width="100px" ItemStyle-HorizontalAlign="Center">
                    <HeaderStyle Width="100" BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                    <ItemStyle HorizontalAlign="Center" />
                    <itemtemplate>
                        <asp:CheckBox ID="chkbox" runat="server"    />
                    
                
            
        
    

    

Karthik_Mahalingam

public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                showData();
            }
        }
        protected void showData()
        {
            DataTable ds = new DataTable();
            ds.Columns.Add("drug_id");

            ds.Columns.Add("drug_name");
            ds.Columns.Add("drug_description");
            ds.Columns.Add("task_status");
            ds.Columns.Add("task_type");

            ds.Rows.Add(1, "a", "aaa", "aaaa", "aaaaaaaaaaaa");
            ds.Rows.Add(2, "b", "bb", "bbb", "bbbbbbbbbbbb");
            ds.Rows.Add(3, "ac", "cc", "ccc", "ccccccccccc");
            ds.Rows.Add(4, "d", "dd", "ddddd", "dddddddddddddd");
            
            GvGrade.DataSource = ds;
            GvGrade.DataBind();
        }


        protected void DeleteRecord(string drug_name)
        {
             
        }

        protected void BtnLogin_Click(object sender, EventArgs e)
        {
            foreach (GridViewRow grow in GvGrade.Rows)
            {
                CheckBox chkbox = (CheckBox)grow.FindControl("chkbox");
                if (chkbox.Checked)
                {
                    string drug_name = grow.Cells[1].Text;
                    DeleteRecord(drug_name);
                }
            }
            //Displaying the Data in GridView  
            showData();
        }
    }

LuciusAvette

Это для заполнения таблицы данными. Это не то, чего я хочу.

Я хочу удалить выбранную строку, Картик.

1 Ответов

Рейтинг:
9

LuciusAvette

Исправлено.

Похоже, что мой код для "DeleteRecord "просто не любит" TemplateField "и предпочитает"BoundField".