В настоящее время я создаю веб-приложение asp.net на C# с помощью Visual Studio. У меня есть gridview, который отображает данные из таблицы базы данных, и я добавил источник данных вручную на моей странице .cs, так как я преобразовал дочернюю DOB в возраст, таким образом, позволяя мне фильтровать gridview с выпадающим списком возрастных групп. Все это прекрасно работает, единственная проблема, с которой я столкнулся, - это заставить кнопку удаления ссылки работать. Мне нужно, чтобы он полностью удалял дочерний элемент из таблицы базы данных, если щелкнуть.Я не могу получить кнопку удаления ссылки на gridview для работы
Я начал ходить в GridView в режиме разработки, добавить новый столбец -> поле Button (типа кнопки «ссылка», название команды «удалить»), а затем добавить следующий код в моей странице .cs:
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
LinkButton lnkRemove = (LinkButton)sender;
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "delete from children where " +
"[email protected]";
cmd.Parameters.Add("@childID", SqlDbType.VarChar).Value
= lnkRemove.CommandArgument;
GridView1.DataSource = source;
GridView1.DataBind();
}
Когда я запускаю страницу и нажмите удалить рядом с любым из детей, я получаю следующее сообщение об ошибке:
Я буду включать полный код с моей страницы .cs, а также мой исходный код. Может кто-нибудь помочь мне выяснить, почему я получаю сообщение об ошибке и почему кнопки удаления не удаляются без проблем? Заранее спасибо.
ПОЛНЫЙ .cs КОД:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Configuration;
using System.Data.SqlClient;
namespace Coursework
{
public partial class Testy1 : System.Web.UI.Page
{
//create a datasource
SqlDataSource source = new SqlDataSource();
protected void Page_Load(object sender, EventArgs e)
{
//always set some defaults for the sqldatasource
source.ID = "source1";
source.ConnectionString = ConfigurationManager.ConnectionStrings["newregDBConnectionString"].ConnectionString;
source.SelectCommand = "SELECT firstname, dob, DATEDIFF(hour, dob, GETDATE())/8766 AS age FROM children ORDER BY age";
if (!IsPostBack)
{
//bind the grid
GridView1.DataSource = source;
GridView1.DataBind();
}
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
//the new database query, now with where clause
source.SelectCommand = "SELECT firstname, dob, DATEDIFF(hour, dob, GETDATE())/8766 AS age FROM children WHERE (DATEDIFF(hour, dob, GETDATE())/8766 BETWEEN @start AND @end) ORDER BY age";
//get the end age from the dropdown and cast as int
int end = Convert.ToInt32(DropDownList1.SelectedValue);
//get the start int for the filter
int start = end - 2;
//if the filter is resetted, make sure the query returns all ages
if (end == 5)
{
start = 5;
end = 99;
}
//replace the parameters in the query
source.SelectParameters.Add("start", start.ToString());
source.SelectParameters.Add("end", end.ToString());
//rebind the grid
GridView1.DataSource = source;
GridView1.DataBind();
}
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
}
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
LinkButton lnkRemove = (LinkButton)sender;
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "delete from children where " +
"[email protected]";
cmd.Parameters.Add("@childID", SqlDbType.VarChar).Value
= lnkRemove.CommandArgument;
GridView1.DataSource = source;
GridView1.DataBind();
}
}
ИСХОДНЫЙ КОД:
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Testy1.aspx.cs" Inherits="Coursework.Testy1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
<p></p>
<p></p>
<p></p>
<p></p>
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
<asp:ListItem Text="Filter age" Value="5"></asp:ListItem>
<asp:ListItem Text="5 - 7" Value="7"></asp:ListItem>
<asp:ListItem Text="8 - 10" Value="10"></asp:ListItem>
<asp:ListItem Text="11 - 13" Value="13"></asp:ListItem>
<asp:ListItem Text="14 - 16" Value="16"></asp:ListItem>
</asp:DropDownList>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnSelectedIndexChanged="GridView1_SelectedIndexChanged" OnRowDeleting="GridView1_RowDeleting" >
<Columns>
<asp:TemplateField HeaderText="Name">
<ItemTemplate>
<%# Eval("firstname") %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="DOB">
<ItemTemplate>
<%# Convert.ToDateTime(Eval("dob")).ToString("d MMMM yyyy") %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Age">
<ItemTemplate>
<%# Eval("age") %>
</ItemTemplate>
</asp:TemplateField>
<asp:ButtonField CommandName="Delete" Text="Delete" />
</Columns>
</asp:GridView>
</asp:Content>
Вы даже не присвоен 'CommandArgument' на кнопку поля. –
В исходном коде или на странице .cs? Я только когда-либо использовал функцию удаления при автоматическом подключении к источнику данных без кода .cs, поэтому я новичок в этом способе делать что-то! – ACostea
здесь 'LinkButton lnkRemove = (LinkButton) sender;' sender - GridView not linkbutton – Sankar