Hello community
I am learning asp.net...but i am not finding easy!
I have detailsview control with bound fields...some using Templatefields.
I am trying to access values in those fields but i get nulls....i really dont know why..
I am proving all my code....
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Projects.aspx.vb" Inherits="Projects" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Projects Statuses</title>
<style type="text/css">
#FormView1
{
position:absolute;
top:110px;
margin-left:100px;
height:482px;
width: 552px;
border-style:groove;
border-style:solid;
left: 180px;
}
#header
{
text-align:center;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<h1 id="header" > Station Force Account Projects </h1>
<b> Choose Project to Edit </b>
<asp:Label ID="lblResuts" runat="server" Text="Record Edited" Visible="false">
</asp:Label>
<asp:SqlDataSource ID="dropDS" runat="server"
ConnectionString="<%$ ConnectionStrings:unrafpl%>"
SelectCommand="Select Vote_ID, [Description] from Votes
inner join tblFinancialYrs on tblFinancialYrs.FinancialYearID=votes.FinancialYearID
Where tblFinancialYrs.CurrentFlag=1">
</asp:SqlDataSource>
<asp:DropDownList ID="drop1" runat="server" DataSourceID="dropDS" Width="257px"
AutoPostBack="true" DataTextField="Description" DataValueField="Vote_ID">
</asp:DropDownList>
<hr />
<asp:DetailsView ID="FormView1" runat="server" DataKeyNames="Vote_ID" AllowPaging="True"
CellPadding="4" ForeColor="#333333"
GridLines="None" AutoGenerateRows="False"
style="margin-left: 95px; width: 691px;" AutoGenerateEditButton="True">
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<CommandRowStyle BackColor="#E2DED6" Font-Bold="True" />
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<FieldHeaderStyle BackColor="#E9ECF1" Font-Bold="True" />
<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
<FooterTemplate>
</FooterTemplate>
<Fields>
<asp:BoundField DataField = "Vote_ID" HeaderText = "ProjectID"
ReadOnly = "True" />
<asp:BoundField DataField = "Description" HeaderText = "Project" />
<asp:BoundField DataField = "Quarter" HeaderText = "Quarter" />
<asp:TemplateField HeaderText="Project Category">
<ItemTemplate>
<asp:Label id="txtProject" runat="server" Text='<%# Eval("CategoryName") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="VoteCategory" runat="server" DataSourceID="Category" DataValueField="CategoryName" DataTextField="CategoryName" Width="300" SelectedValue='<%# Bind("CategoryName") %>'>
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField = "PlannedAmount" HeaderText = "Planned Amount" DataFormatString="{0:C}" />
<asp:BoundField DataField = "Aproved_Amount" HeaderText = "Actual Amount Received" DataFormatString="{0:C}" />
<asp:TemplateField HeaderText="Date Received">
<ItemTemplate>
<asp:Label ID="receiveddate" runat="server" Text='<%# Eval("DateReceived","{0:dd/MM/yyyy}") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtReceivedDate" runat="server" Text='<%# Bind("DateReceived","{0:dd/MM/yyyy}") %>'></asp:TextBox>
<asp:CompareValidator ID="DateR" runat="server" Type="Date" Operator="DataTypeCheck" ControlToValidate="txtReceivedDate"
ErrorMessage="Please enter dates in format MM/DD/YYYY">
</asp:CompareValidator>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Planned Start Date">
<ItemTemplate>
<asp:Label ID="PlannedStartdate" runat="server" Text='<%# Eval("PlannedStartDate") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtPlannedStartDate" runat="server" Text='<%# Bind("PlannedStartDate") %>'></asp:TextBox>
<asp:CompareValidator ID="pstartdate" runat="server" Type="Date" Operator="DataTypeCheck" ControlToValidate="txtPlannedStartDate"
ErrorMessage="Please enter dates in format MM/DD/YYYY">
</asp:CompareValidator>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Actual Start Date">
<ItemTemplate>
<asp:Label ID="lblActualsdate" runat="server" Text='<%# Eval("ActualStartDate") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtActualStartDate" runat="server" Text='<%# Bind("ActualStartDate") %>'></asp:TextBox>
<asp:CompareValidator ID="DateActualStart" runat="server" Type="Date" Operator="DataTypeCheck" ControlToValidate="txtActualStartDate"
ErrorMessage="Please enter dates in format MM/DD/YYYY">
</asp:CompareValidator>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Planned Project End Date">
<ItemTemplate>
<asp:Label ID="plannedenddate" runat="server" Text='<%# Eval("PlannedEndDate") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtPlannedEndDate" runat="server" Text='<%# Bind("PlannedEndDate") %>'></asp:TextBox>
<asp:CompareValidator ID="Plannedend" runat="server" Type="Date" Operator="DataTypeCheck" ControlToValidate="txtPlannedEndDate"
ErrorMessage="Please enter dates in format MM/DD/YYYY">
</asp:CompareValidator>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Actual End Date">
<ItemTemplate>
<asp:Label ID="actualenddate" runat="server" Text='<%# Eval("ActualEndDate") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtActualEndDate" runat="server" Text='<%# Bind("ActualEndDate") %>'></asp:TextBox>
<asp:CompareValidator ID="ActualEnddate" runat="server" Type="Date" Operator="DataTypeCheck" ControlToValidate="txtActualEndDate"
ErrorMessage="Please enter dates in format MM/DD/YYYY">
</asp:CompareValidator>
</EditItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField = "FinancialYear" HeaderText = "Financial Year" DataFormatString="{0:MM/dd/yyyy}"/>
<asp:TemplateField HeaderText= "Remarks">
<EditItemTemplate>
<asp:TextBox ID="txtremarks" runat="server" Width="300" Height="80" TextMode="MultiLine" Text='<%# Bind("remarks") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
</Fields>
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<EditRowStyle BackColor="#999999" />
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
</asp:DetailsView>
<asp:SqlDataSource ID="Category" runat="server"
ConnectionString="<%$ ConnectionStrings:unrafpl%>"
SelectCommand="select CategoryName from tblVoteCategories">
</asp:SqlDataSource>
</form>
</body>
</html>
Here i use findcontrol which returns nulls...
Protected Sub FormView1_ItemUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewUpdateEventArgs) Handles FormView1.ItemUpdating
Try
Dim id As Integer = FormView1.DataKey.Value
Dim voteTextbox As TextBox = FormView1.FindControl("Description")
Dim categoryTextbox As DropDownList = FormView1.FindControl("VoteCategory")
Dim quarterTextbox As TextBox = FormView1.FindControl("Quarter")
Dim plannedTextbox As TextBox = FormView1.FindControl("PlannedAmount")
Dim approvedTextbox As TextBox = FormView1.FindControl("Aproved_Amount")
Dim datereceivedTextbox As TextBox = FormView1.FindControl("txtReceivedDate")
Dim plannedstartdateTextbox As TextBox = FormView1.FindControl("txtPlannedStartDate")
Dim ActualStartDateTextbox As TextBox = FormView1.FindControl("txtActualStartDate")
Dim PlannedEndDateTextbox As TextBox = FormView1.FindControl("txtPlannedEndDate")
Dim ActualEndDateTextbox As TextBox = FormView1.FindControl("txtActualEndDate")
Dim remarksTextbox As TextBox = FormView1.FindControl("txtremarks")
Dim fyvoteTextbox As TextBox = FormView1.FindControl("FinancialYear")
Dim myvote As String = voteTextbox.Text.ToString
Dim mycategory As String = categoryTextbox.SelectedValue.ToString
Dim myq As String = quarterTextbox.Text.ToString
Dim pAmount As Decimal = CDec(plannedTextbox.Text.ToString)
Dim aAmount As Decimal = CDec(approvedTextbox.Text)
Dim dReceived As Date = Date.Parse(datereceivedTextbox.Text)
Dim plannedsDate As Date = Date.Parse(plannedstartdateTextbox.Text)
Dim aactualsDate As Date = Date.Parse(ActualStartDateTextbox.Text)
Dim pplannedeDate As Date = Date.Parse(PlannedEndDateTextbox.Text)
Dim aactualeDate As Date = Date.Parse(ActualEndDateTextbox.Text)
Dim fy As String = fyvoteTextbox.Text
Dim myremarks As String = remarksTextbox.Text
cnn = New SqlConnection(strconnection)
cnn.Open()
cm = New SqlCommand("spEditVote", cnn)
cm.CommandType = CommandType.StoredProcedure
cm.Parameters.Add("@voteid", SqlDbType.Int).Value = id
cm.Parameters.Add("@vote", SqlDbType.NVarChar).Value = myvote
cm.Parameters.Add("@category", SqlDbType.NVarChar).Value = mycategory
cm.Parameters.Add("@quarter", SqlDbType.NVarChar).Value = myq
cm.Parameters.Add("@plannedamount", SqlDbType.Decimal).Value = pAmount
cm.Parameters.Add(",@approvedamount", SqlDbType.Decimal).Value = aAmount
cm.Parameters.Add(",@datereceived", SqlDbType.Date).Value = dReceived
cm.Parameters.Add("@pStartDate", SqlDbType.Date).Value = plannedsDate
cm.Parameters.Add("@aStartDate", SqlDbType.Date).Value = aactualsDate
cm.Parameters.Add("@pEndDate", SqlDbType.Date).Value = pplannedeDate
cm.Parameters.Add("@aEndDate", SqlDbType.Date).Value = aactualeDate
cm.Parameters.Add("@remarks", SqlDbType.NVarChar).Value = myremarks
cm.Parameters.Add("@financialyr", SqlDbType.NVarChar).Value = fy
Dim i As Integer = cm.ExecuteNonQuery()
lblResuts.Text = i & "Record Edited"
lblResuts.Visible = True
Catch ex As Exception
lblResuts.Text = Err.Description
lblResuts.Visible = True
Finally
If Not cnn.State <> ConnectionState.Closed Then
cnn.Close()
End If
End Try
End Sub
Here some other code in case it is relevant
Private Sub BindData()
strSQL = "Select * from vProjects"
cnn = New SqlConnection(strconnection)
Try
cnn.Open()
cm = New SqlCommand(strSQL, cnn)
adapt = New SqlDataAdapter
adapt.SelectCommand = cm
dt = New DataSet
tb = New DataTable
adapt.Fill(dt, "tb")
FormView1.DataSource = dt
FormView1.DataMember = "tb"
FormView1.DataBind()
Catch ex As Exception
lblResuts.Text = Err.Description
Finally
If Not cnn.State <> ConnectionState.Closed Then
cnn.Close()
End If
End Try
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
BindData()
End Sub
Protected Sub FormView1_ModeChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewModeEventArgs) Handles FormView1.ModeChanging
If Not e.NewMode = DetailsViewMode.Edit Then
FormView1.ChangeMode(e.NewMode)
BindData()
End If
End Sub
Protected Sub FormView1_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewPageEventArgs) Handles FormView1.PageIndexChanging
FormView1.PageIndex = e.NewPageIndex
BindData()
End Sub
I guess something might be getting messy with the mode changing event... a postback??
But if i remove the databinding code, i get an error!
Please any suggestions why findcontrol returns null??
Ronald