2017-02-23 51 views
1

今天我正在學習所有關於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"/> 
        &nbsp;<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; 

} 

} 

有了這個代碼,答案將是一個更大的一部分完成我的項目。希望你能幫我解決這個問題。

回答

2

該單元格不包含Text但確實包含Label。我想試試這個:

var cell = GridView1.Rows[gridrow.RowIndex].Cells[4]; 
string name = ((Label)cell.FindControl("Label1")).Text; 
+0

我試過的代碼,但它給我這個錯誤:**「的TableCell」不包含「FindControls」的定義,並沒有擴展方法「FindControls」接受一個類型的第一個參數'TableCell'可以找到(你是否缺少使用指令或程序集引用?).. ** – BrunoEarth

+0

對不起,它是'FindControl',最後沒有's'。我試圖從記憶中做到這一點。 –

+0

是的,幾個小時前我能夠改變它,但這次錯誤發生在.Text。我不知道爲什麼它切換到.Text,它有相同的錯誤。 – BrunoEarth

相關問題