Gridview: ButtonField: Change Button Text and link on Page load - asp.net

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

Related

VB.NET checkbox problems

Web site in Visual Studio 2010 with VB. I created a GridView with a checkbox column, but my code behind is not recognizing the checked rows. Runs through with no error but never sees a checked row.
<asp:GridView
ID="gvwOrderDetails"
DataKeyNames="ID"
runat="server"
BackColor="White"
BorderColor="#DEDFDE"
BorderStyle="None"
BorderWidth="1px"
CellPadding="4"
ForeColor="Black"
GridLines="Vertical">
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="OrderSelector" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
<FooterStyle BackColor="#CCCC99" />
<HeaderStyle BackColor="#6B696B" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#F7F7DE" ForeColor="Black" HorizontalAlign="Right" />
<RowStyle BackColor="#F7F7DE" />
<SelectedRowStyle BackColor="#CE5D5A" Font-Bold="True" ForeColor="White" />
<SortedAscendingCellStyle BackColor="#FBFBF2" />
<SortedAscendingHeaderStyle BackColor="#848384" />
<SortedDescendingCellStyle BackColor="#EAEAD3" />
<SortedDescendingHeaderStyle BackColor="#575357" />
</asp:GridView>
Protected Sub btnVoid_Click(sender As Object, e As System.EventArgs) Handles btnVoid.Click
Dim atLeastOneRowVoided As Boolean = False
For Each row As GridViewRow In gvwOrderDetails.Rows
Dim cb As CheckBox = TryCast(row.Cells(0).FindControl("OrderSelector"), CheckBox)
If cb IsNot Nothing AndAlso cb.Checked Then
atLeastOneRowVoided = True
Dim orderID As Integer = _
Convert.ToInt32(gvwOrderDetails.DataKeys(row.RowIndex).Value)
lbl1.Text &= String.Format( _
"This would have voided ProductID {0}<br />", orderID)
End If
Next
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.

Error in exporting selected rows from Gridview to Excel

I am trying to export selected columns from GridView to Excel, and every time I run the code an error pops up with some new .dll file name. What could be the issue? Please find the code below for your reference.
<asp:Panel ID="general" runat="server" BorderColor="#333333" BorderStyle="Double" CssClass="emailpnl" Width="800px">
<asp:GridView ID="bestpractgrv" runat="server" AutoGenerateColumns="False" OnLoad="bestpractgrv_Load" CellPadding="3" GridLines="Vertical" Width="100%" BackColor="White" BorderColor="#999999" BorderStyle="None" BorderWidth="1px" AllowPaging="True" OnPageIndexChanging = "OnPaging">
<AlternatingRowStyle BackColor="Gainsboro" />
<Columns>
<asp:TemplateField>
<HeaderTemplate>
<asp:CheckBox ID="chkboxSelectAll" runat="server" onclick="CheckAllEmp(this);" />
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID ="boolcb" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="ID">
<ItemTemplate>
<asp:Label ID="idlbl" runat="server" Text='<%# Bind("iID")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Discipline ID">
<ItemTemplate>
<asp:Label ID="discplnlbl" runat="server" Text='<%# Bind("iDisciplineID")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Date Created">
<ItemTemplate>
<asp:Label ID="dateclbl" runat="server" Text='<%# Bind("dDateCreated")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Title">
<ItemTemplate>
<asp:Label ID="bptitlelbl" runat="server" Text='<%# Bind("cBPTitle")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<FooterStyle BackColor="#CCCCCC" ForeColor="Black" />
<HeaderStyle BackColor="#000084" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
<RowStyle BackColor="#EEEEEE" ForeColor="Black" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#008A8C" Font-Bold="True" ForeColor="White" />
<SortedAscendingCellStyle BackColor="#F1F1F1" />
<SortedAscendingHeaderStyle BackColor="#0000A9" />
<SortedDescendingCellStyle BackColor="#CAC9C9" />
<SortedDescendingHeaderStyle BackColor="#000065" />
</asp:GridView>
</asp:Panel>
VB Code
Private Sub PopulateCheckBoxArray()
Dim CheckBoxArray As ArrayList
If ViewState("CheckBoxArray") IsNot Nothing Then
CheckBoxArray = DirectCast(ViewState("CheckBoxArray"), ArrayList)
Else
CheckBoxArray = New ArrayList()
End If
Dim CheckBoxIndex As Integer
Dim CheckAllWasChecked As Boolean = False
Dim chkAll As CheckBox = DirectCast(bestpractgrv.HeaderRow.Cells(0).FindControl("chkboxSelectAll"), CheckBox)
Dim checkAllIndex As String = "chkboxSelectAll-" & bestpractgrv.PageIndex
If chkAll.Checked Then
If CheckBoxArray.IndexOf(checkAllIndex) = -1 Then
CheckBoxArray.Add(checkAllIndex)
End If
Else
If CheckBoxArray.IndexOf(checkAllIndex) <> -1 Then
CheckBoxArray.Remove(checkAllIndex)
CheckAllWasChecked = True
End If
End If
For i As Integer = 0 To bestpractgrv.Rows.Count - 1
If bestpractgrv.Rows(i).RowType = DataControlRowType.DataRow Then
Dim chk As CheckBox = DirectCast(bestpractgrv.Rows(i).Cells(0).FindControl("boolcb"), CheckBox)
CheckBoxIndex = bestpractgrv.PageSize * bestpractgrv.PageIndex + (i + 1)
If chk.Checked Then
If CheckBoxArray.IndexOf(CheckBoxIndex) = -1 AndAlso Not CheckAllWasChecked Then
CheckBoxArray.Add(CheckBoxIndex)
End If
Else
If CheckBoxArray.IndexOf(CheckBoxIndex) <> -1 OrElse CheckAllWasChecked Then
CheckBoxArray.Remove(CheckBoxIndex)
End If
End If
End If
Next
ViewState("CheckBoxArray") = CheckBoxArray
End Sub
And I get the error on following line
Dim chkAll As CheckBox = DirectCast(bestpractgrv.HeaderRow.Cells(0).FindControl("chkboxSelectAll"), CheckBox)
This is the error message
An exception of type 'System.NullReferenceException' occurred in App_Web_pqx0e3wy.dll but was not handled in user code
After every compilation the dll name changes, while App_Web_XXXX.dll remains constant

Gridview: Change Button Text and link on Page load

Gurus,
I have a gridview with the template field button and I want to change text on the button on the user type on page load.
I am trying to get the button from Gridview to change the text and link but the control always return null. It will be really helpful to understand how to change the text and link on page load.
TryCast(row.Cells(0).Controls(0).FindControl("idAppearButton"),
Button)
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 = TryCast(row.Cells(0).Controls(0).FindControl("idAppearButton"), Button)
'button.Text = "Buy"
Next
End If
End Sub
<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>
You have to use Row.FindControl(id) to find the reference to the control. You cannot use Cell.Text if you use TemplateFields, that works only with BoundFields:
button = DirectCast(row.FindControl("idAppearButton"), Button)

Resources