Problems with nested gridview parent row color - asp.net

I am trying to set the rows colours in the parent grid view base on the data. For example in the coding, if the currency is USD then set the row to chocolate colour else set it to red but instead my program shows that its all in red even though there is currency USD data in the gridview.
heres my code behind,
Protected Sub gvUserInfo_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GridView1.RowDataBound
e.Row.Cells(1).Visible = False
Dim currency As String = e.Row.Cells(3).Text
Dim con As New SqlConnection(ConfigurationManager.ConnectionStrings("HedgingTestConnectionString").ConnectionString)
If (e.Row.RowType = DataControlRowType.DataRow) Then
For Each cell As TableCell In e.Row.Cells
If currency = "USD" Then
cell.ForeColor = Color.Chocolate
Else
cell.BackColor = Color.Red
Label1.Text = e.Row.Cells(3).Text
End If
Next
con.Open()
Dim gv As GridView = DirectCast(e.Row.FindControl("gvChildGrid"), GridView)
Dim ref As Integer = Convert.ToInt32(e.Row.Cells(1).Text)
Dim cmd As New SqlCommand("select * from TT where Reference_NO=" & ref, con)
Dim da As New SqlDataAdapter(cmd)
Dim ds As New DataSet()
da.Fill(ds)
con.Close()
gv.DataSource = ds
gv.DataBind()
End If
End Sub
Below is my gridview code,
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="Hedging_ID,CCY" HeaderStyle-Font-Size="Medium" HeaderStyle-BackColor="SeaGreen" OnRowDataBound="gvUserInfo_RowDataBound" width="100%"
HorizontalAlign="Center" RowStyle-HorizontalAlign="Center" GridLines="None">
<Columns>
<asp:TemplateField ItemStyle-Width="20px">
<ItemTemplate>
<a href="JavaScript:divexpandcollapse('div<%# Eval("ref_ID")%>');">
<img id="imgdiv<%# Eval("ref_ID")%>" border="0" src="plus.png" />
</a>
</ItemTemplate>
<ItemStyle Width="20px"></ItemStyle>
</asp:TemplateField>
<asp:BoundField DataField="ref_ID" HeaderText="ID" SortExpression="ref_ID" />
<asp:BoundField DataField="Bank_Name" HeaderText="Bank" SortExpression="Bank_Name" />
<asp:BoundField DataField="CCY" HeaderText="Currency" SortExpression="CCY" />
<asp:BoundField DataField="Ref_Date" DataFormatString="{0:d}" HeaderText="Contract Date" SortExpression="Ref_Date" />
<asp:BoundField DataField="Ref_End_Date" DataFormatString="{0:d}" HeaderText="Maturity Date" SortExpression="Ref_End_Date" />
<asp:TemplateField>
<ItemTemplate>
<tr>
<td colspan="100%">
<div id="div<%# Eval("Hedging_ID")%>" style="display: none; position: relative; left: 15px; overflow: auto">
<asp:GridView ID="gvChildGrid" runat="server" AutoGenerateColumns="false" BorderStyle="Double" BorderColor="#df5015" GridLines="None" Width="700px" HorizontalAlign="Center">
<HeaderStyle BackColor="#df5015" Font-Bold="true" ForeColor="White" />
<RowStyle BackColor="#E1E1E1" HorizontalAlign="Center" />
<AlternatingRowStyle BackColor="White" />
<HeaderStyle BackColor="#df5015" Font-Bold="true" ForeColor="White" />
<Columns>
<asp:BoundField DataField="Invoice_Number" HeaderText="Invoice Number" SortExpression="Invoice_Number" />
<asp:BoundField DataField="Payment_Date" DataFormatString="{0:d}" HeaderText="Payment Date" SortExpression="Payment_Date" />
<asp:BoundField DataField="Payment_Amount" DataFormatString="{0:c2}" HeaderText="Payment Amount" SortExpression="Payment_Amount" />
</Columns>
</asp:GridView>
</div>
</td>
</tr>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<HeaderStyle BackColor="SeaGreen" Font-Size="Medium"></HeaderStyle>
<RowStyle HorizontalAlign="Center"></RowStyle>
</asp:GridView>

Change the condition like this
If currency = "USD" Then
cell.BackColor= Color.Chocolate
Else
cell.BackColor = Color.Red
Label1.Text = e.Row.Cells(3).Text
End If
May be thats because you have put "ForeColor"

Related

Merge Cells togheter in Gridview in asp.net vb while using a button

I have manage to merge the rows in my grid-view with the same values together as the example below shows.
Country----------Name-----------
USA-------------Chris------------
-------------------Jan------------Calculate
Africa------------Alta------------
-------------------Abri------------
China-----------Lee------------
The problem however is I want the display to look like this.
Country----------Name-----------Calculate
USA-------------Chris--------------Calculate
-------------------Jan----------------Calculate
Africa------------Alta----------------Calculate
-------------------Abri-----------------Calculate
China-----------Lee-----------------Calculate
The Calculate is a button.. Sorry I can't put in nice images I don't have enough rep yet to do so.
I have no idea how to fix this here is my grid-view.
<table>
<tr>
<td>
<asp:GridView ID="Gridview1" runat="server" AutoGenerateColumns="False" BorderColor="Black" BorderStyle="Solid" CssClass="grd" DataKeyNames="ID" DataSourceID="Datasource" EmptyDataText="There are no data records to display." PageSize="5"Width="900px">
<AlternatingRowStyle CssClass="grdalt" />
<Columns>
<asp:BoundField DataField="Country" HeaderText="Country" ItemStyle-BorderStyle="Solid">
<ItemStyle BorderStyle="Solid" />
</asp:BoundField>
<asp:BoundField DataField="Name" HeaderText="Name" ItemStyle-BorderStyle="Solid">
<ItemStyle BorderStyle="Solid" />
</asp:BoundField>
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="cmdcalculate" runat="server" Text="Calculate" CommandArgument='<%# Eval("ID")%>'
CommandName="Calculate" Width="150px" />
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" Width="160px" />
</asp:TemplateField>
</Columns>
<HeaderStyle CssClass="grdhead" />
<SelectedRowStyle BackColor="#80FFFF" />
</asp:GridView>
<asp:SqlDataSource ID="Datasource" runat="server" ConnectionString="<%$ ConnectionStrings:ApplicationServices %>"
SelectCommand="SELECT ID,Country,Name From Table">
</asp:SqlDataSource>
</td>
</tr>
</table>
Here is my code behind.
Public Sub GridView_Row_Merger(gridView As GridView)
For rowIndex As Integer = gridView.Rows.Count - 2 To 0 Step -1
Dim currentRow As GridViewRow = gridView.Rows(rowIndex)
Dim previousRow As GridViewRow = gridView.Rows(rowIndex + 1)
For i As Integer = 0 To currentRow.Cells.Count - 1
If currentRow.Cells(i).Text = previousRow.Cells(i).Text Then
If previousRow.Cells(i).RowSpan < 2 Then
currentRow.Cells(i).RowSpan = 2
Else
currentRow.Cells(i).RowSpan = previousRow.Cells(i).RowSpan + 1
End If
previousRow.Cells(i).Visible = False
End If
Next
Next
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Page.IsPostBack Then
Else
Gridview1.DataBind()
GridView_Row_Merger(Gridview1)
End If
End Sub
If anyone can assist me please will be nice.
Hi guys I solved it in an easier way I think.
Here is my answer..
Gridview..
<table>
<tr>
<td>
<asp:GridView ID="Gridview1" runat="server" AutoGenerateColumns="False"
BorderColor="Black" BorderStyle="Solid" CssClass="grd" DataKeyNames="ID"
DataSourceID="Datasource" EmptyDataText="There are no data records to display." PageSize="4"
Width="900px">
<AlternatingRowStyle CssClass="grdalt" />
<Columns>
<asp:TemplateField HeaderText="Country" Visible="True">
<ItemTemplate>
<asp:Label ID="Country" runat="server" Text='<%# Eval("Country")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Name" HeaderText="Name" ItemStyle-BorderStyle="Solid">
<ItemStyle BorderStyle="Solid" />
</asp:BoundField>
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="cmdownvalues" runat="server" Text="Calculate" CommandArgument='<%# Eval("ID")%>'
CommandName="Target" Width="150px" />
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" Width="160px" />
</asp:TemplateField>
</Columns>
<HeaderStyle CssClass="grdhead" />
<SelectedRowStyle BackColor="#80FFFF" />
</asp:GridView>
<asp:SqlDataSource ID="Datasource" runat="server" ConnectionString="<%$ ConnectionStrings:ApplicationServices %>"
SelectCommand="SELECT ID,Country,Name From Table">
</asp:SqlDataSource>
</td>
</tr>
</table>
Here is my code Behind..
Private Sub Gridview1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles Gridview1.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
Dim titleLabel As Label = e.Row.FindControl("Country")
Dim strval As String = CType(titleLabel, Label).Text
Dim title As String = ViewState("title")
If title = strval Then
titleLabel.Visible = False
titleLabel.Text = String.Empty
Else
title = strval
ViewState("title") = title
titleLabel.Visible = True
titleLabel.Text = "<br><b>" & title & "</b><br>"
End If
End If
End Sub

How to get the ID of the record in the GridViewRow in loop?

Aim: Gridview with checkbox on each line, user then clicks a button and all ticked lines are actioned in the button code. I need the ID's of all the records where the CheckBox is checked.
Error:
Object reference not set to an instance of an object.
on row: ID_Current = row.FindControl("ID").ToString
if I change the to ID_Current = DirectCast(row.FindControl("cbSelect"), CheckBox).Checked I get 'True' as a result but I already know that and want to get the ID.
Aspx-Code with my Gridview:
<asp:Panel ID="ActionGrid" runat="Server">
<h2>Actions To Edit</h2>
<asp:GridView ID="GridView3" runat="server" AllowPaging="True" AllowSorting="True" AlternatingRowStyle-CssClass="alt" AutoGenerateColumns="False" CssClass="mGrid" DataKeyNames="UPRN" DataSourceID="SqlDataSource3" EmptyDataText="There are no data records to display." Font-Size="Medium" PagerStyle-CssClass="pgr" Width="1000px">
<%-- AutoGenerateEditButton="True"--%>
<Columns>
<asp:TemplateField HeaderText="Select">
<ItemTemplate>
<asp:CheckBox ID="cbSelect" runat="server" AutoPostBack="false" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField ControlStyle-Width="50px" DataField="UPRN" HeaderText="UPRN" ReadOnly="True" SortExpression="UPRN" />
<asp:BoundField DataField="LocationItemPosition" HeaderText="Location Item Position" ReadOnly="True" SortExpression="LocationItemPosition" />
<asp:TemplateField HeaderText="Surveye" SortExpression="SurveyDate">
<ItemTemplate>
<asp:Label ID="lblSurveyDate" runat="server" Text='<%# apFunctionCharacters.fncDateTidy(Eval("SurveyDate"))%>' />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="ItemRef" HeaderText="Item Ref" ReadOnly="True" SortExpression="ItemRef" />
<asp:BoundField DataField="OverallRiskCategory" HeaderText="Overall Risk Category" ReadOnly="True" SortExpression="OverallRiskCategory" />
<asp:BoundField DataField="Comments" HeaderText="Comments" ReadOnly="True" SortExpression="Comments" />
</Columns>
<EditRowStyle BackColor="#999999" />
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
</asp:GridView>
<asp:Button ID="btnChangeToNA" runat="server" CssClass="Button" Text="Change to NA" />
<asp:Label ID="lblTest" runat="server" Text="Label"></asp:Label>
</asp:Panel>
Submit button:
<asp:Button ID="btnChangeToNA" runat="server" CssClass="Button" Text="Change to NA" />
.aspx.vb stored procedure/action code
Protected Sub btnChangeToNA_Click(sender As Object, e As EventArgs) Handles btnChangeToNA.Click
For Each row As GridViewRow In GridView3.Rows
Dim ID_Current As String = ""
'read the label
If DirectCast(row.FindControl("cbSelect"), CheckBox).Checked Then
ID_Current = row.FindControl("ID").ToString
' change value
'############stored procedure here
Dim connection As SqlConnection
Dim command As New SqlCommand
Dim ds As New DataSet
Dim ConnectionString1 As String = System.Configuration.ConfigurationManager.ConnectionStrings("MY_SQL").ToString()
connection = New SqlConnection(ConnectionString1)
connection.Open()
With command
.Connection = connection
.CommandText = "spChangeValue "
.CommandType = CommandType.StoredProcedure
.Parameters.Clear()
.Parameters.AddWithValue("#ID_Current", ID_Current)
.ExecuteNonQuery()
End With
'#############################
lblTest.Text += ID_Current
End If
'Loop
Next
End Sub
With FindControl you find controls(what suprise) not strings. And you have to pass the ID of the control not a property like Id.
So this doesnt make much sense:
Dim ID_Current As String = row.FindControl("ID").ToString()
Instead you could store the ID in a HiddenField, so on aspx:
<asp:HiddenField ID="HiddenID" runat="server" Value='<%# Eval("ID_Current") %>' />
Now you can get the reference to this HiddenField with FindControl:
Dim hiddenID As HiddenField = DirectCast(row.FindControl("HiddenID"), HiddenField)
Dim ID_Current As String = hiddenID.Value
You need a control with the id "ID"
<ItemTemplate>
<asp:HiddenField ID="ID" runat="server" Value='<%# FillMeSomehow%>' />
<asp:CheckBox ID="cbSelect" runat="server" AutoPostBack="false" />
</ItemTemplate>

Inconsistency with dropdowns displaying values in gridview

I'm having a problem with my dropdown lists in my child gridview displaying values. For whatever reason the first dropdown in the row works fine and displays the values from the database, the other ones don't display anything.
Below is the code for my gridviews:
<asp:GridView ID="GVAccounts" runat="server" AutoGenerateColumns="False"
CellPadding="4" ForeColor="#333333"
GridLines="Horizontal"
style="position: relative; margin-top: 10px">
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
<Columns>
<asp:BoundField DataField="branch" HeaderText="Branch"
SortExpression="branch" />
<asp:BoundField DataField="no" HeaderText="Account"
SortExpression="account" />
<asp:TemplateField HeaderText="Name" SortExpression="name">
<EditItemTemplate>
<asp:TextBox ID="TextName" runat="server" Text='<%# Eval("name") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="LabelName" runat="server" Text='<%# Eval("name") + " " + Eval("surname") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="type" HeaderText="Type" SortExpression="type" />
<asp:BoundField DataField="sub" HeaderText="Sub" SortExpression="sub" />
<asp:BoundField DataField="TotalAmount" HeaderText="Hold"
SortExpression="TotalAmount" />
<asp:BoundField DataField="loc" HeaderText="LOC" DataFormatString="{0:C}" SortExpression="loc" />
<asp:BoundField DataField="locstatus" HeaderText="LOC status"
SortExpression="locstatus" />
<asp:BoundField DataField="HoldCalc" HeaderText="OD/EX Amt" SortExpression="HoldCalc" />
<asp:BoundField DataField="odtimes" HeaderText="#OD" SortExpression="odtimes" />
<asp:TemplateField>
<ItemTemplate>
<tr>
<td colspan="100%">
<div id="gridChild" style="display: inline; position: relative; left: 15px; overflow: auto">
<asp:GridView ID="gvChildGrid" runat="server" AutoGenerateColumns="false"
BorderStyle="Double" BorderColor="#5D7B9D" Width="80%">
<HeaderStyle BackColor="#5D7B9D" Font-Bold="true" ForeColor="White" />
<RowStyle BackColor="#E1E1E1" />
<AlternatingRowStyle BackColor="White" />
<HeaderStyle BackColor="#5D7B9D" Font-Bold="true" ForeColor="White" />
<Columns>
<asp:TemplateField HeaderText="Select">
<ItemTemplate>
<asp:CheckBox ID="chkSelect" runat="server" AutoPostBack="true"
oncheckedchanged="chkSelect_CheckedChanged" EnableViewState="true" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="effective" HeaderText="Effective"
HeaderStyle-HorizontalAlign="Left" >
<HeaderStyle HorizontalAlign="Left" />
</asp:BoundField>
<asp:BoundField DataField="desc_" HeaderText="Desc"
HeaderStyle-HorizontalAlign="Left" >
<HeaderStyle HorizontalAlign="Left" />
</asp:BoundField>
<asp:BoundField DataField="code" HeaderText="TC"
HeaderStyle-HorizontalAlign="Left" >
<HeaderStyle HorizontalAlign="Left" />
</asp:BoundField>
<asp:BoundField DataField="amount" HeaderText="Amount"
HeaderStyle-HorizontalAlign="Left" >
<HeaderStyle HorizontalAlign="Left" />
</asp:BoundField>
<asp:BoundField DataField="tracer" HeaderText="Cheq #"
HeaderStyle-HorizontalAlign="Left" >
<HeaderStyle HorizontalAlign="Left" />
</asp:BoundField>
<asp:BoundField DataField="empl" HeaderText="Empl"
HeaderStyle-HorizontalAlign="Left" >
<HeaderStyle HorizontalAlign="Left" />
</asp:BoundField>
<asp:BoundField DataField="balance" HeaderText="OD/EXT Amt"
HeaderStyle-HorizontalAlign="Left" >
<HeaderStyle HorizontalAlign="Left" />
</asp:BoundField>
<asp:TemplateField HeaderText="Note">
<ItemTemplate>
<asp:DropDownList ID="DropDownNote" runat="server"
onselectedindexchanged="DropDownNote_SelectedIndexChanged"
AutoPostBack="True">
<asp:ListItem></asp:ListItem>
<asp:ListItem>MWC</asp:ListItem>
<asp:ListItem>CBM</asp:ListItem>
<asp:ListItem>Return</asp:ListItem>
<asp:ListItem>TSF</asp:ListItem>
<asp:ListItem>OK NO S/C</asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Note1">
<ItemTemplate>
<asp:DropDownList ID="ddNote2" runat="server"
onselectedindexchanged="ddNote2_SelectedIndexChanged" AutoPostBack="true">
<asp:ListItem Selected="True">NSF</asp:ListItem>
<asp:ListItem>Funds Not Clear</asp:ListItem>
<asp:ListItem>Post Dated</asp:ListItem>
<asp:ListItem>Stale Dated</asp:ListItem>
<asp:ListItem>Stop Payment</asp:ListItem>
<asp:ListItem>Encoding Incorrect</asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Branch">
<ItemTemplate>
<asp:DropDownList ID="ddBranch" runat="server" DataSourceID="BranchDataSource"
DataTextField="branch" DataValueField="branch" AutoPostBack="true">
</asp:DropDownList>
<asp:SqlDataSource ID="BranchDataSource" runat="server"
ConnectionString="<%$ ConnectionStrings:ThirdPartyDataConnectionString %>"
SelectCommand="SELECT [branch] FROM [branch]"></asp:SqlDataSource>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Account">
<ItemTemplate>
<asp:TextBox ID="TextNo" runat="server" ></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Type">
<ItemTemplate>
<asp:DropDownList ID="ddType" runat="server" DataSourceID="typeSource"
DataTextField="Type" DataValueField="Type" AutoPostBack="true">
</asp:DropDownList>
<asp:SqlDataSource ID="typeSource" runat="server"
ConnectionString="<%$ ConnectionStrings:ThirdPartyDataConnectionString %>"
SelectCommand="SELECT [Type] FROM [DMDType]"></asp:SqlDataSource>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Sub">
<ItemTemplate><asp:TextBox ID="TextSub" Width="25px" runat="server"></asp:TextBox></ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
</td>
</tr>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<EditRowStyle BackColor="#999999" />
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" CssClass="GVFixedHeader" />
<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
<SortedAscendingCellStyle BackColor="#E9E7E2" />
<SortedAscendingHeaderStyle BackColor="#506C8C" />
<SortedDescendingCellStyle BackColor="#FFFDF8" />
<SortedDescendingHeaderStyle BackColor="#6F8DAE" />
</asp:GridView>
Below is the method that is having the issue with displaying:
Private Function CheckForSubmit() As Boolean
Try
conn = New SqlConnection(connectionString)
Dim cmdNote As New SqlCommand("select note, note1, noteBranch, noteAccountNo, noteType, noteSub, id from DmdOD where id = #id order by effective, time_, seqno_dmddmhi_dmhi", conn)
cmd = New SqlCommand("select submitted, id, effective FROM DmdOD where no = #no and entered = '" & ddDate.SelectedItem.Text & "' order by effective, time_, seqno_dmddmhi_dmhi", conn)
Dim objDBId As Object = 0
Dim id = 0
Dim objDate As Date
Dim dateStr As String = ""
If ddDate.SelectedIndex <> -1 Then
cmd = New SqlCommand("select submitted, id, entered FROM DmdOD where no = #no and entered = '" & ddDate.SelectedItem.Text & "' order by effective, time_, seqno_dmddmhi_dmhi", conn)
' cmd.Parameters.Add(New SqlParameter("effective", ddDate.SelectedItem.Text))
Else
cmd = New SqlCommand("select submitted, id, entered FROM DmdOD where no = #no order by effective, time_, seqno_dmddmhi_dmhi", conn)
End If
cmd.CommandType = CommandType.Text
Dim i = 0
For Each row As GridViewRow In GVAccounts.Rows
cmd.Parameters.Add(New SqlParameter("#no", row.Cells(1).Text))
Dim gv As GridView = DirectCast(row.FindControl("gvChildGrid"), GridView)
conn.Open()
Dim idReader As SqlClient.SqlDataReader = cmd.ExecuteReader()
'get ids in order
While (idReader.Read())
If Not objId.Contains(idReader.GetValue(1)) Then
objId.Add(idReader.GetValue(1))
End If
End While
conn.Close()
conn.Open()
Dim reader As SqlClient.SqlDataReader = cmd.ExecuteReader()
While (reader.Read())
objSubmit = reader.GetValue(0)
objDBId = reader.GetValue(1)
objDate = reader.GetValue(2)
dateStr = objDate.ToShortDateString
If dateStr = ddDate.SelectedItem.Text Then
Exit While
End If
End While
conn.Close()
If objSubmit = True And dateStr = ddDate.SelectedItem.Text Then
For Each r As GridViewRow In gv.Rows
cmdNote.Parameters.Add(New SqlParameter("#id", objId(i)))
Dim ddNote As Control = r.FindControl("DropDownNote")
Dim ddl As DropDownList = DirectCast(ddNote, DropDownList)
Dim ddNote2 As Control = r.FindControl("ddNote2")
Dim ddlNote As DropDownList = DirectCast(ddNote2, DropDownList)
ddlNote.Items.Insert(0, New ListItem(String.Empty, String.Empty))
Dim ddBranch As Control = r.FindControl("ddBranch")
Dim ddBranchBox As DropDownList = DirectCast(ddBranch, DropDownList)
ddBranchBox.Items.Insert(0, New ListItem(String.Empty, String.Empty))
Dim txtAccount As Control = r.FindControl("TextNo")
Dim txtAccountBox As TextBox = DirectCast(txtAccount, TextBox)
Dim ddType As Control = r.FindControl("ddType")
Dim ddTypeBox As DropDownList = DirectCast(ddType, DropDownList)
Dim txtSub As Control = r.FindControl("TextSub")
Dim txtSubBox As TextBox = DirectCast(txtSub, TextBox)
r.Cells(0).Enabled = False
r.Cells(8).Enabled = False
r.Cells(9).Enabled = False
r.Cells(10).Enabled = False
r.Cells(11).Enabled = False
r.Cells(12).Enabled = False
r.Cells(13).Enabled = False
'Display fields
gv.Columns(8).Visible = True
gv.Columns(9).Visible = True
gv.Columns(10).Visible = True
gv.Columns(11).Visible = True
gv.Columns(12).Visible = True
gv.Columns(13).Visible = True
ddBranchBox.Visible = True
txtAccount.Visible = True
ddTypeBox.Visible = True
txtSub.Visible = True
'Get Data for fields
conn.Open()
cmdNote.ExecuteNonQuery()
Dim readNotes As SqlClient.SqlDataReader = cmdNote.ExecuteReader()
readNotes.Read()
'Note
If IsDBNull(readNotes.GetValue(0)) Then
ddl.SelectedItem.Text = ""
Else
ddl.SelectedItem.Text = readNotes.GetValue(0)
End If
'Note1
If IsDBNull(readNotes.GetValue(1)) Then
'GVAccounts.Columns(12).Visible = False
ddlNote.Visible = False
ddlNote.SelectedItem.Text = ""
Else
'ddlNote.SelectedItem.Text = readNotes.GetValue(1)
ddlNote.SelectedItem.Selected = False
ddlNote.Items.FindByText(readNotes.GetValue(1)).Selected = True
End If
'Branch
If IsDBNull(readNotes.GetValue(2)) Then
ddBranchBox.Visible = False
ddBranchBox.SelectedItem.Text = ""
Else
ddBranchBox.SelectedItem.Text = readNotes.GetValue(2)
End If
'Account
If IsDBNull(readNotes.GetValue(3)) Then
txtAccountBox.Visible = False
txtAccountBox.Text = ""
Else
txtAccountBox.Text = readNotes.GetValue(3)
End If
'Type
If IsDBNull(readNotes.GetValue(4)) Then
ddTypeBox.Visible = False
ddTypeBox.SelectedItem.Text = ""
Else
ddTypeBox.SelectedItem.Text = readNotes.GetValue(4)
End If
'Sub
If IsDBNull(readNotes.GetValue(5)) Then
txtSubBox.Visible = False
txtSubBox.Text = ""
Else
txtSubBox.Text = readNotes.GetValue(5)
End If
conn.Close()
i += 1
cmdNote.Parameters.Clear()
Next
ButtonSubmit.Enabled = False
ButtonSave.Enabled = False
ButtonSaveTop.Enabled = False
End If
i = 0
'cmd.Parameters.Clear()
'cmdNote.Parameters.Clear()
objSubmit = False
dateStr = ""
cmd.Parameters.RemoveAt(0)
cmdNote.Parameters.Clear()
objId.Clear()
Next
If objSubmit = True Then
Return objSubmit
End If
Catch ex As Exception
LblErr.ForeColor = Drawing.Color.DarkRed
LblErr.Text = "CheckForSubmit - " & ex.Message
Finally
conn.Dispose()
End Try
Return Nothing
End Function
Edit: I should also note that when I step through the code I see that the dropdowns do in fact have values, yet nothing is being displayed for them on the gridview, I'm stumped.
Updated answer
I would compare drop down lists "note" and "note1"
e.g. note works but note1 doesn't.
The difference I can see between the 2 is that note has an empty list item. Try adding an empty list item to note 1.
Failing that, copy the working code from note and gradually replace it with the values from Note1, checking if/when it fails.

ASP.NET GridView inside Repeater Control

I have checked all available articles and none seem to help me.
I have a GridView that is located inside a Repeater control. The data that populates the Gridview is dynamic and is grouped by a SectionID. I need for each repeated GridView to list the data rows grouped according to their SectionID.
How do I do this?
Thanks.
Here is what I have so far:
Public Sub GrabRepeaterData()
Dim connstr As String = ConfigurationManager.ConnectionStrings("MyString").ToString()
Dim ss As New SqlConnection(connstr)
Dim sqlStr As String = "SELECT SectionID, Name FROM Table1"
Dim selectCMD As New SqlClient.SqlCommand(sqlStr, ss)
Dim dt As New DataTable
Dim ds As New DataSet
Dim dataAdapter As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter
dataAdapter.SelectCommand = selectCMD
dataAdapter.Fill(dt)
selectCMD.Dispose()
dataAdapter.Dispose()
ss.Close()
ss.Dispose()
dt.Columns.Add("Column1")
dt.Columns.Add("Column2")
dt.Columns.Add("Column3")
dt.Columns.Add("Column4")
dt.Columns.Add("Column5")
dt.Columns.Add("Column6")
dt.Columns.Add("Column7")
dt.Columns.Add("Column8")
For Each row As DataRow In dt.Rows
Dim SectionID As String = ""
SectionID = row("SectionID")
Dim Column1 As String = ""
Dim Column2 As String = ""
Dim Column3 As Boolean
Dim Column4 As String = ""
Dim Column5 As String = ""
Dim Column6 As String = ""
Dim Column7 As Boolean
Dim Column8 As Boolean
Dim ProgConn As String = ""
ProgConn = ConfigurationManager.ConnectionStrings("MyString").ToString()
Dim ProgSqlQuery As New SqlConnection(ProgConn)
Dim ProgResults As New SqlCommand("SELECT [Column1], [Column2], [Column3], [Column4], [Column5], [Column6], [Column7], [Column8] FROM Table2 WHERE SectionID = #SectionID ORDER BY Column4 DESC", ProgSqlQuery)
ProgResults.Parameters.AddWithValue("#SectionID", SectionID).Value = SectionID
ProgSqlQuery.Open()
Dim rProg As SqlDataReader = ProgResults.ExecuteReader()
While rProg.Read()
If Not rProg("Column1").Equals(DBNull.Value) Then
Column1 = CStr(rProg("Column1"))
End If
If Not rProg("Column2").Equals(DBNull.Value) Then
Column2 = CStr(rProg("Column2"))
End If
If Not rProg("Column3").Equals(DBNull.Value) Then
Column3 = CStr(rProg("Column3"))
End If
If Not rProg("Column4").Equals(DBNull.Value) Then
Column4 = CStr(rProg("Column4"))
End If
If Not rProg("Column5").Equals(DBNull.Value) Then
Column5 = CStr(rProg("Column5"))
End If
If Not rProg("Column6").Equals(DBNull.Value) Then
Column6 = CStr(rProg("Column6"))
End If
If Not rProg("Column7").Equals(DBNull.Value) Then
Column7 = CStr(rProg("Column7"))
End If
If Not rProg("Column8").Equals(DBNull.Value) Then
Column8 = CStr(rProg("Column8"))
End If
End While
rProg.Close()
ProgResults.Dispose()
ProgSqlQuery.Close()
ProgSqlQuery.Dispose()
row("Column1") = Column1
row("Column2") = Column2
row("Column3") = Column3
row("Column4") = Column4
row("Column5") = Column5
row("Column6") = Column6
row("Column7") = Column7
row("Column8") = Column8
row.EndEdit()
dt.AcceptChanges()
Next
CustomInfoRepeater.DataSource = dt
CustomInfoRepeater.DataBind()
End Sub
Protected Sub CustomInfoRepeater_ItemDataBound(sender As Object, e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles CustomInfoRepeater.ItemDataBound
If e.Item.ItemType = ListItemType.Item Then
Try
Dim grdVw As GridView = TryCast(e.Item.FindControl("CustomInfoGridView"), GridView)
grdVw.DataSource = DirectCast(e.Item.DataItem, DataTable).Rows
grdVw.DataBind()
Dim CustPanel As UpdatePanel = DirectCast(CustomInfoRepeater.Items(0).FindControl("CustomInfoPanel"), UpdatePanel)
CustPanel.Update()
Catch
End Try
End If
End Sub
Here is my HTML:
<asp:Repeater ID="CustomInfoRepeater" runat="server">
<ItemTemplate>
<div class="download-box3">
</h2>
<asp:UpdatePanel ID="CustomInfoPanel" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:PostBackTrigger ControlID="CustomInfoGridView" />
</Triggers>
<ContentTemplate>
<asp:GridView ID="CustomInfoGridView" runat="server" Width="100%" AutoGenerateColumns="False"
DataKeyNames="Column1" GridLines="None" RowStyle-Height="40px" EnableViewState="False"
CellPadding="4" ForeColor="#333333" RowStyle-VerticalAlign="Middle">
<Columns>
<asp:BoundField DataField="Column1" />
<asp:TemplateField ItemStyle-Width="35px" ItemStyle-HorizontalAlign="Center" ItemStyle-VerticalAlign="Middle">
<ItemTemplate>
<asp:ImageButton ID="newIcon" runat="server" Width="31px" CssClass="myGridImage"
Visible="false" ImageUrl="images/new.png" />
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" Width="35px" />
</asp:TemplateField>
<asp:TemplateField ItemStyle-Width="30px" ItemStyle-HorizontalAlign="Center" ItemStyle-VerticalAlign="Middle">
<ItemTemplate>
<asp:ImageButton ID="DeleteButton" runat="server" AlternateText="Delete" ImageUrl="images/xmark.png"
OnClientClick="return confirm('Are you sure you want to delete this entry?')"
CommandArgument='<%# Eval("Column1") %>' CommandName="Remove" CssClass="myGridImage">
</asp:ImageButton>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" Width="30px" />
</asp:TemplateField>
<asp:TemplateField ItemStyle-Width="50px" ItemStyle-HorizontalAlign="Center" ItemStyle-VerticalAlign="Middle">
<ItemTemplate>
<asp:LinkButton ID="GenComUpdateButton" runat="server" CssClass="buttonsmall" Text="update"
CommandArgument='<%# Eval("Column1") %>' CommandName="GenComments"></asp:LinkButton>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" Width="50px" />
</asp:TemplateField>
<asp:TemplateField HeaderText="Impact" HeaderStyle-HorizontalAlign="Center" ItemStyle-Width="30px"
ItemStyle-HorizontalAlign="Center" ItemStyle-VerticalAlign="Middle">
<ItemTemplate>
<asp:Image ID="statusIcon" runat="server" Width="20px" CssClass="myGridImage" Visible="false"
ImageUrl="" AlternateText="*" />
</ItemTemplate>
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" Width="50px" />
</asp:TemplateField>
<asp:TemplateField ItemStyle-Width="50px" HeaderText="Files" ItemStyle-HorizontalAlign="Center"
ItemStyle-VerticalAlign="Middle">
<ItemTemplate>
<asp:ImageButton ID="filesIcon" runat="server" Width="23px" CssClass="myGridImage"
CommandArgument='<%# Eval("Column3") %>' CommandName="Download" Visible="false"
ImageUrl="images/pdf.png" AlternateText="*" />
<asp:LinkButton ID="AttachAssetsBtn" runat="server" CssClass="buttonredsmall" Text="upload"
CommandArgument='<%# Eval("Column1") %>' CommandName="Uploads" Visible="false"></asp:LinkButton>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" Width="50px" />
</asp:TemplateField>
<asp:BoundField DataField="Column3" HeaderText="Summary" HeaderStyle-HorizontalAlign="Center"
ItemStyle-VerticalAlign="Middle">
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
<ItemStyle VerticalAlign="Middle" HorizontalAlign="Left" />
</asp:BoundField>
<asp:TemplateField ItemStyle-Width="50px" HeaderText="Reviewed" ItemStyle-HorizontalAlign="Center"
ItemStyle-VerticalAlign="Middle">
<ItemTemplate>
<asp:Image ID="reviewedIcon" runat="server" Width="23px" CssClass="myGridImage" Visible="false"
ImageUrl="images/checkmark.png" AlternateText="*" />
<asp:CheckBox ID="reviewedCheckBox" runat="server" CssClass="inputtext" Visible="false"
AutoPostBack="true" OnCheckedChanged="GenComCheckUpdate" />
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" Width="50px" />
</asp:TemplateField>
<asp:BoundField DataField="Column4" HeaderText="Updated" HeaderStyle-HorizontalAlign="Center"
ItemStyle-VerticalAlign="Middle" ItemStyle-Width="75px">
<ItemStyle VerticalAlign="Middle" HorizontalAlign="Center" />
</asp:BoundField>
<asp:BoundField DataField="Column6" Visible="false" />
<asp:BoundField DataField="Column7" Visible="false" />
</Columns>
<EmptyDataTemplate>
<span class="data-none">No Comments have been added to this section.</span>
</EmptyDataTemplate>
<RowStyle CssClass="RowStyle" BackColor="#F7F6F3" ForeColor="#333333" />
<EmptyDataRowStyle CssClass="EmptyRowStyle" />
<PagerStyle CssClass="PagerStyle" BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
<SelectedRowStyle CssClass="SelectedRowStyle" BackColor="#E2DED6" Font-Bold="True"
ForeColor="#333333" />
<HeaderStyle CssClass="HeaderStyle" BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<EditRowStyle CssClass="EditRowStyle" BackColor="#999999" />
<AlternatingRowStyle CssClass="AltRowStyle" BackColor="White" ForeColor="#284775" />
<SortedAscendingCellStyle BackColor="#E9E7E2" />
<SortedAscendingHeaderStyle BackColor="#506C8C" />
<SortedDescendingCellStyle BackColor="#FFFDF8" />
<SortedDescendingHeaderStyle BackColor="#6F8DAE" />
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</ItemTemplate>
<SeparatorTemplate>
<hr />
</SeparatorTemplate>
</asp:Repeater>
Thanks for your help!
What I understand from the code is you are merging two datasources into one. Then binding it to the Repeater and then fetching the datasource for GV from the repeater DataItem and binding it to the GridView.
What I would suggest is keep the datasources separate and do it in two steps:
1: Bind the repeater to just the SectionID i.e. data returned by SELECT SectionID, Name FROM Table1
2: In the Repeater ItemDataBound, get the SectionID and fetch data with the query you have in ProgResults. Then bind that to the GV.
I totally agree with gbs. Here's how you can do it:
In the markup, add a hidden field inside repeater, outside the updatepanel:
<asp:Repeater ID="CustomInfoRepeater" runat="server">
<ItemTemplate>
<asp:HiddenField ID="hdnSectionID" Value='<%# Eval("SectionID")%>' runat="server" />
<asp:Label ID="lblName" Text='<%# Eval("Name")%>' runat="server"></asp:Label>
<div class="download-box3">
</h2>
<asp:UpdatePanel ID="CustomInfoPanel" runat="server" UpdateMode="Conditional">
<%-- Rest of the markup goes here --%>
Rewrite GrabRepeaterData() sub only to populate the repeater:
Public Sub GrabRepeaterData()
Dim connstr As String = ConfigurationManager.ConnectionStrings("MyString").ToString()
Dim dt As New DataTable
Using conn As SqlConnection = New SqlConnection(connstr)
conn.Open()
Dim sqlStr As String = "SELECT SectionID, Name FROM Table1"
Dim cmd As New SqlClient.SqlCommand(sqlStr, conn)
Dim adapter As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter
adapter.SelectCommand = cmd
adapter.Fill(dt)
End Using
CustomInfoRepeater.DataSource = dt
CustomInfoRepeater.DataBind()
End Sub
In repeater's ItemDataBound, find the HiddenField, find it's value, find the GridView inside UpdatePanel, populate it this way:
Protected Sub CustomInfoRepeater_ItemDataBound(sender As Object, e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles CustomInfoRepeater.ItemDataBound
If e.Item.ItemType = ListItemType.Item Then
Dim sectionID As Integer = 0
Dim hdnSectionID = TryCast(e.Item.FindControl("hdnSectionID"), HiddenField)
Dim CustomInfoPanel = TryCast(e.Item.FindControl("CustomInfoPanel"), UpdatePanel)
If (CustomInfoPanel IsNot Nothing AndAlso hdnSectionID IsNot Nothing AndAlso Integer.TryParse(hdnSectionID.Value, sectionID)) Then
Dim CustomInfoGridView = TryCast(CustomInfoPanel.FindControl("CustomInfoGridView"), GridView)
If (CustomInfoGridView IsNot Nothing) Then
Dim connstr As String = ConfigurationManager.ConnectionStrings("MyString").ToString()
Dim dt As New DataTable
Using conn As SqlConnection = New SqlConnection(connstr)
conn.Open()
Dim cmd As New SqlCommand("SELECT [Column1], [Column2], [Column3], [Column4], [Column5], [Column6], [Column7], [Column8] FROM Table2 WHERE SectionID = #SectionID ORDER BY Column4 DESC", conn)
cmd.Parameters.AddWithValue("#SectionID", sectionID)
Dim adapter As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter
adapter.SelectCommand = cmd
adapter.Fill(dt)
End Using
CustomInfoGridView.DataSource = dt
CustomInfoGridView.DataBind()
End If
End If
End If
End Sub

Gridview: ButtonField: Change Button Text and link on Page load

Gurus,
Further to My query on Gridview:TemplateField
I have a gridview with ButtonField. I want to change text based on the user type on page load.
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Trim(Request.QueryString("Msg")) <> "" Then
If InStr(Request.QueryString("Msg"), "<") > 0 Then
Response.Write(Mid(Request.QueryString("Msg"), 1, InStr(Request.QueryString("Msg"), "<")))
Else
Response.Write(Request.QueryString("Msg"))
End If
End If
If Page.IsPostBack = False Then
Dim sSeries As String
sSeries = "Aim NBDE Part 1"
Dim o_cmd As SqlCommand
Dim o_reader As SqlDataReader
o_Con = New SqlConnection(GlobalVarC.DataS)
o_Con.Open()
Dim ds As New Data.DataSet
Dim da As SqlDataAdapter
Dim ExamId As String
S_Sql = "SELECT SNo from Exam_Ser where Series='" & sSeries.ToString & "'"
o_cmd = New SqlCommand(S_Sql, o_Con)
o_reader = o_cmd.ExecuteReader
ExamId = ""
Dim ExamIdTmp As String
While o_reader.Read
If ExamId.Equals("") Then
ExamId = ExamId + "SNo = "
Else
ExamId = ExamId + " OR SNo = "
End If
ExamIdTmp = o_reader(0).ToString
ExamId = ExamId + ExamIdTmp
ExamId = ExamId + ""
End While
o_reader.Close()
o_cmd.Dispose()
S_Sql = "SELECT Name from Exam where " & ExamId.ToString
da = New SqlDataAdapter(S_Sql, o_Con)
da.Fill(ds)
GridSubject.DataSource = ds
GridSubject.DataBind()
da.Dispose()
ds.Dispose()
o_Con.Close()
For Each row As GridViewRow In GridSubject.Rows
Dim button As Button
button = DirectCast(row.FindControl("idAppearButton"), Button)
button.Text = "Buy"
Next
End If
End Sub
I am able perform operation on button click from GridSubject_SelectedIndexChanged.
I am trying to get the button from Gridview to change the text. I tried some search and found way to control button on click from 'GridSubject_SelectedIndexChanged' but not on page load.
It will be really helpful if I can get pointers on how to get handle of ButtonField CommandName="ViewResults") on page load.
<asp:ButtonField ButtonType="Button" CommandName="ViewResults" Text="Results" >
<HeaderStyle HorizontalAlign="Center" VerticalAlign="Top" />
</asp:ButtonField>
<div id="gridViewId" align="center">
<asp:GridView ID="GridSubject" runat="server" AutoGenerateColumns="False" CellPadding="3"
OnSelectedIndexChanged="GridSubject_SelectedIndexChanged" BackColor="#CCCCCC"
BorderColor="#E7E7FF" BorderStyle="None" BorderWidth="1px"
Width="714px" GridLines="Horizontal"
>
<EditRowStyle Font-Names="Calibri" />
<EmptyDataRowStyle Font-Names="Calibri" />
<FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" Font-Names="Calibri" />
<AlternatingRowStyle BackColor="#F7F7F7" Font-Names="Calibri" />
<Columns >
<asp:BoundField DataField="Name" HeaderText="Exam Name">
<ItemStyle Width="140px" HorizontalAlign="Left" VerticalAlign="Top" />
<HeaderStyle HorizontalAlign="Left" />
</asp:BoundField>
<asp:TemplateField ItemStyle-Width="100px">
<ItemTemplate>
<asp:RadioButtonList ID="RadioButtonList1" runat="server">
<asp:ListItem Value="0">Part 1</asp:ListItem>
<asp:ListItem Value="1">Part 2</asp:ListItem>
<asp:ListItem Selected="True" Value="3">Part 1 & 2</asp:ListItem>
</asp:RadioButtonList>
</ItemTemplate>
<FooterStyle HorizontalAlign="Left" />
<HeaderStyle HorizontalAlign="Left" />
<ItemStyle Width="100px" HorizontalAlign="Left"></ItemStyle>
</asp:TemplateField>
<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:Button ID="idAppearButton" runat="server"
CommandName="MYCOMMAND" Text="Appear">
</asp:Button>
</ItemTemplate>
</asp:TemplateField>
<asp:ButtonField ButtonType="Button" CommandName="ViewResults" Text="Results" >
<HeaderStyle HorizontalAlign="Center" VerticalAlign="Top" />
</asp:ButtonField>
<asp:TemplateField HeaderText="Status">
<ItemTemplate>
<asp:Label runat="server" Text="Not Completed"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<RowStyle BackColor="#E7E7FF" ForeColor="#000000" Font-Names="Calibri" />
<SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7"
Font-Names="Cambria" />
<PagerStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" HorizontalAlign="Right"
Font-Names="Calibri" />
<HeaderStyle BackColor="#000000" Font-Bold="True" ForeColor="#F7F7F7" />
<SortedAscendingCellStyle BackColor="#F1F1F1" />
<SortedAscendingHeaderStyle BackColor="#808080" />
<SortedDescendingCellStyle BackColor="#CAC9C9" />
<SortedDescendingHeaderStyle BackColor="#383838" />
<SortedAscendingCellStyle BackColor="#F4F4FD"></SortedAscendingCellStyle>
<SortedAscendingHeaderStyle BackColor="#5A4C9D"></SortedAscendingHeaderStyle>
<SortedDescendingCellStyle BackColor="#D8D8F0"></SortedDescendingCellStyle>
<SortedDescendingHeaderStyle BackColor="#3E3277"></SortedDescendingHeaderStyle>
</asp:GridView>
</div>
Use the RowDataBound event of the grid view to work with each row as it is bound to the grid, like this:
Protected Sub gridViewId_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
If e.Row.RowType = DataControlRowType.DataRow Then
' Find the button to change the text of
Dim theButtonToChangeTextOf As Button = CType(e.Row.FindControl("idAppearButton"), Button)
theButtonToChangeTextOf.Text = theTextYouWantForTheButtonHere
End If
End Sub

Resources