Удаление выбранной строки из 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
Это для заполнения таблицы данными. Это не то, чего я хочу.
Я хочу удалить выбранную строку, Картик.