今天我正在學習所有關於gridviews的知識。總結我的GridView的內容,那就是:使用asp.net在gridview中創建一個自定義的刪除和編輯?
Id Type Name Image
Delete Edit 1 Guitar Ibanez pic1.jpg
Delete Edit 2 Guitar Fender pic2.jpg[LabelId]
[LabelName]
我想要做的是,每當我點擊按鈕刪除或編輯和更新按鈕,它應該檢索列名的值。例如,如果我點擊第二行的編輯按鈕,它應該檢索名稱「Fender」並將其顯示在[LabelName]
以及其[LabelId]
。另外,如果我點擊第一行的刪除按鈕,它應該檢索名稱「Ibanez」並將其顯示在下面的標籤上。同樣適用於更新按鈕。它應該總是顯示名稱,我會每當編輯,刪除和更新按鈕被點擊。
我試着爲此創建一個代碼,但它只檢索我想要的名稱,它總是空白的。
這裏是aspx
代碼:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="id" DataSourceID="SqlDataSource1">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="Button3" runat="server" Text="Delete" OnClick="Button3_Click"/>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField ShowHeader="False">
<EditItemTemplate>
<asp:Button ID="ButtonUpdate" runat="server" CausesValidation="True" CommandName="Update" Text="Update" OnClick="ButtonUpdate_Click"/>
<asp:Button ID="Button2" runat="server" CausesValidation="False" CommandName="Cancel" Text="Cancel" />
</EditItemTemplate>
<ItemTemplate>
<asp:Button ID="ButtonEdit" runat="server" CausesValidation="False" CommandName="Edit" Text="Edit" OnClick="ButtonEdit_Click"/>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="id" SortExpression="id">
<EditItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("id") %>'></asp:Label>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("id") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="type" SortExpression="type">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("type") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("type") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="name" SortExpression="name">
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("name") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Bind("name") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="image" SortExpression="image">
<EditItemTemplate>
<asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("image") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label4" runat="server" Text='<%# Bind("image") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:BrandsDBConnectionString %>" DeleteCommand="DELETE FROM [guitarBrands] WHERE [id] = @id" InsertCommand="INSERT INTO [guitarBrands] ([id], [type], [name], [image]) VALUES (@id, @type, @name, @image)" SelectCommand="SELECT [id], [type], [name], [image] FROM [guitarBrands]" UpdateCommand="UPDATE [guitarBrands] SET [type] = @type, [name] = @name, [image] = @image WHERE [id] = @id">
<DeleteParameters>
<asp:Parameter Name="id" Type="Int32" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="id" Type="Int32" />
<asp:Parameter Name="type" Type="String" />
<asp:Parameter Name="name" Type="String" />
<asp:Parameter Name="image" Type="String" />
</InsertParameters>
<UpdateParameters>
<asp:Parameter Name="type" Type="String" />
<asp:Parameter Name="name" Type="String" />
<asp:Parameter Name="image" Type="String" />
<asp:Parameter Name="id" Type="Int32" />
</UpdateParameters>
</asp:SqlDataSource>
<br/>
<asp:Label ID="lblId" runat="server" Text="Label"></asp:Label><br/>
<asp:Label ID="lblName" runat="server" Text="Label"></asp:Label><br/>
</form>
這裏是aspx.cs代碼:
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
SqlConnection con1;
SqlCommand cmd1;
DataSet ds1;
public _Default()
{
con1 = new SqlConnection();
con1.ConnectionString = ConfigurationManager.ConnectionStrings["BrandsDBConnectionString"].ToString();
cmd1 = new SqlCommand();
ds1 = new DataSet();
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
bindgridviewguitarbrands();
}
}
//Start of Gridview Code for Guitar Brands
private void bindgridviewguitarbrands()
{
con1.Open();
cmd1.CommandText = "SELECT * FROM [guitarBrands]";
cmd1.Connection = con1;
SqlDataAdapter da1 = new SqlDataAdapter(cmd1);
da1.Fill(ds1);
con1.Close();
GridView1.DataBind();
}
protected void Button3_Click(object sender, EventArgs e)
{
Button btn1 = sender as Button;
GridViewRow gridrow = btn1.NamingContainer as GridViewRow;
int id = Convert.ToInt32(GridView1.DataKeys[gridrow.RowIndex].Value.ToString());
string name = GridView1.Rows[gridrow.RowIndex].Cells[4].Text;
lblId.Text = id.ToString();
lblName.Text = name;
}
protected void ButtonEdit_Click(object sender, EventArgs e)
{
Button btn2 = sender as Button;
GridViewRow gridrow = btn2.NamingContainer as GridViewRow;
int id = Convert.ToInt32(GridView1.DataKeys[gridrow.RowIndex].Value.ToString());
string name = GridView1.Rows[gridrow.RowIndex].Cells[4].Text;
lblId.Text = id.ToString();
lblName.Text = name;
}
protected void ButtonUpdate_Click(object sender, EventArgs e)
{
Button btn3 = sender as Button;
GridViewRow gridrow = btn3.NamingContainer as GridViewRow;
int id = Convert.ToInt32(GridView1.DataKeys[gridrow.RowIndex].Value.ToString());
string name = GridView1.Rows[gridrow.RowIndex].Cells[4].Text;
lblId.Text = id.ToString();
lblName.Text = name;
}
}
有了這個代碼,答案將是一個更大的一部分完成我的項目。希望你能幫我解決這個問題。
我試過的代碼,但它給我這個錯誤:**「的TableCell」不包含「FindControls」的定義,並沒有擴展方法「FindControls」接受一個類型的第一個參數'TableCell'可以找到(你是否缺少使用指令或程序集引用?).. ** – BrunoEarth
對不起,它是'FindControl',最後沒有's'。我試圖從記憶中做到這一點。 –
是的,幾個小時前我能夠改變它,但這次錯誤發生在.Text。我不知道爲什麼它切換到.Text,它有相同的錯誤。 – BrunoEarth