Sourav
Sourav

Reputation: 17530

Edit button text in GridView

Q> I want to show a GridView button's text as hard coded and a event to fire on button click. How to achieve this ?

Till now I've been able to come this far

GridView Sample

But I want to show button text as Read or Delete not the value in the Read/Delete column. The code I've used

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
DataKeyNames="MID" DataSourceID="inbox" EnableModelValidation="True" 
onselectedindexchanged="GridView1_SelectedIndexChanged">
<Columns>
<asp:ButtonField ButtonType="Button" DataTextField="MID" HeaderText="Read" 
  Text="Read" />
<asp:BoundField DataField="MID" HeaderText="MID" InsertVisible="False" 
  ReadOnly="True" SortExpression="MID" />
<asp:BoundField DataField="sender" HeaderText="sender" 
  SortExpression="sender" />
<asp:BoundField DataField="subject" HeaderText="subject" 
  SortExpression="subject" />
<asp:BoundField DataField="on" HeaderText="on" SortExpression="on" />
<asp:ButtonField ButtonType="Button" DataTextField="MID" HeaderText="Delete" 
  Text="Delete" />
</Columns>
</asp:GridView>

<asp:SqlDataSource ID="inbox" runat="server" 
ConnectionString="<%$ ConnectionStrings:connectionString %>" 
SelectCommand="SELECT [MID], [sender], [subject], [on] FROM [mail]">
</asp:SqlDataSource>

Upvotes: 1

Views: 4202

Answers (1)

Icarus
Icarus

Reputation: 63964

If you want the text to appear as "Delete" or "Read", then simply don't set the DataTextField property to use the MID property of the result and instead set the CommandName property as so:

<asp:ButtonField ButtonType="Button" CommandName='<%#Eval("MMID")%>' HeaderText="Delete" 
  Text="Delete" />

As far as handling the OnClick event of the buttons, you can handle the OnRowCommand event on the GridView as so:

<asp:GridView ID="GridView1" runat="server" OnRowCommand="GridView_RowCommand" AutoGenerateColumns="False" 

Now add the code behind:

protected void GridView_RowCommand(Object sender, GridViewCommandEventArgs e)
{

  string MMID = e.CommandName;
  if( (e.CommandSource as ButtonField).Text=="Delete")
  {
             //oh, I should delete this MMID
  }
}    

UPDATE

Above code does not work. ButtonField is as useful as nipples are to men. Instead use an ItemTemplateField as so:

 <asp:TemplateField>
     <ItemTemplate>
         <asp:Button ID="btn" runat="server" CommandName="Delete" CommandArgument='<%#Eval("MID") %>'
                    Text="Delete" />
     </ItemTemplate>
 </asp:TemplateField>

Then the GridView_RowCommand becomes this:

protected void GridView_RowCommand(Object sender, GridViewCommandEventArgs e)
    {
        string mid = e.CommandArgument.ToString();
        // If multiple buttons are used in a GridView control, use the
        // CommandName property to determine which button was clicked.
        if (e.CommandName == "Delete")
        {

        }
    }    

Upvotes: 3

Related Questions