1

I'm learning all about gridviews today. To summarize the contents of my gridview, here it is:

Id                       Type      Name     Image
Delete Edit 1     Guitar    Ibanez    pic1.jpg
Delete Edit 2     Guitar    Fender    pic2.jpg

[LabelId]
[LabelName]

What I'm trying to do is, whenever I click the button delete or edit and update button, it should retrieve the value in column name. For example if i clicked the edit button for 2nd row, it should retrieve the name "Fender" and display it on [LabelName] along with its [LabelId]. Also if I clicked the delete button for 1st row, it should retrieve the name "Ibanez" and display it as well on the labels below. Same applies also for the update button. It should always display the name and I'd whenever the edit, delete and update button is clicked.

I tried creating a code for this but it only retrieves the I'd and not the name, it's always blank.

Here is the aspx code:

<%@ 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>

And here is the aspx.cs code:

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;

}

}

Having the answer for this code will be a greater part on finishing my project. Hopefully you can help me out on this one.

1 Answer 1

2

The cell does not contain Text but does contain a Label. I would try this:

var cell = GridView1.Rows[gridrow.RowIndex].Cells[4];
string name = ((Label)cell.FindControl("Label1")).Text;
Sign up to request clarification or add additional context in comments.

5 Comments

I tried the code but it is giving me this error: 'TableCell' does not contain a definition for 'FindControls' and no extension method 'FindControls' accepting a first argument of type 'TableCell' could be found(are you missing a using directive or an assembly reference?)..
Sorry, it's FindControl, no s at the end. I was trying to do this from memory.
Yes, i was able to change it a couple of hours ago but this time the error went to .Text. I don't know why it switched to .Text, it has the same error.
try adding brackets around (Label)cell.FindControl("Label"))
it did work. I'll give this a check. to be honest, i actually did a different approach Label name = (Label)GridView1.Rows[e.RowIndex].FindControl("Label3"); in GridViewDeleteEventArgs. But still, same results and both works.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.