Click here to Skip to main content
15,905,068 members
Please Sign up or sign in to vote.
1.00/5 (2 votes)
See more:
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 aswell on the labels below. Same applies also for the update button. It should always display the name and id whenever the edit, delete and update button is clicked.

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

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

What I have tried:

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"/>
                     <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:

C#
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;

}

}
Posted
Updated 23-Feb-17 3:00am
Comments
Richard Deeming 23-Feb-17 15:31pm    
GridView1.Rows[gridrow.RowIndex]

You can replace that with: gridrow

You've already retrieved the row; you don't need to find it again.

Also, the as operator can return null if the object is null or not of the expected type. You'll either need to check for null, or use a cast instead:
Button btn2 = (Button)sender;
GridViewRow gridrow = (GridViewRow)btn2.NamingContainer;
BebeSaiyan 24-Feb-17 2:36am    
Sorry can you elaborate on the gridview part? And also for the 2nd solution, it is giving me this error: non-invocable member 'Button' cannot be used like a method.

1 solution

You have posted this same question 9 hours ago: Creating custom edit button in gridview using ASP.NET?[^]

Please refrain from posting the same question multiple times.
 
Share this answer
 
Comments
BebeSaiyan 23-Feb-17 9:49am    
Actually they have different objectives. The previous link has an exception problem while my question here, the output is actually working with undesired results and without exception problems. There's a huge difference.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900