J
John R. Lewis
I posted this yesterday with a different email address. I am reposting with
my fake-address as given to me by Microsoft so that I can be guraranteed a
response from a support representative. Sorry for the repost.
I'd like to make use of the asp:Wizard control to present a step-by-step
guided experience for my user to fill out a complicated data-entry form.
I'd like to make use of two-way databinding provided by the asp:FormView
control to drasticly reduce the number of lines of code I need to write.
But when I combine those two controls, databinding breaks. Please see the
example below. The database in this example is a simple access database with
a single table My real life example is way to complicated to describe here,
but this simple case reproduces the problem.
If you run through the wizard, clicking Finish causes a record to be
inserted with null values in all the fields. What I don't show here, is if
you strip out the wizard control, everything works fine.
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Wizard1_FinishButtonClick(object sender,
WizardNavigationEventArgs e)
{
FormView1.InsertItem(true);
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:AccessDataSource ID="AccessDataSource1" runat="server"
DataFile="~/App_Data/db1.mdb"
InsertCommand="INSERT INTO [Thing] ([Step1Data], [Step2Data], [Step3Data],
[Step4Data]) VALUES (?, ?, ?, ?)"
SelectCommand="SELECT * FROM [Thing]">
<InsertParameters>
<asparameter Name="Step1Data" Type="String" />
<asparameter Name="Step2Data" Type="String" />
<asparameter Name="Step3Data" Type="String" />
<asparameter Name="Step4Data" Type="String" />
</InsertParameters>
</asp:AccessDataSource>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataKeyNames="ThingID"
DataSourceID="AccessDataSource1">
<Columns>
<asp:BoundField DataField="ThingID" HeaderText="ThingID"
InsertVisible="False" ReadOnly="True"
SortExpression="ThingID" />
<asp:BoundField DataField="Step1Data" HeaderText="Step1Data"
SortExpression="Step1Data" />
<asp:BoundField DataField="Step2Data" HeaderText="Step2Data"
SortExpression="Step2Data" />
<asp:BoundField DataField="Step3Data" HeaderText="Step3Data"
SortExpression="Step3Data" />
<asp:BoundField DataField="Step4Data" HeaderText="Step4Data"
SortExpression="Step4Data" />
</Columns>
</asp:GridView>
<asp:FormView ID="FormView1" runat="server" DataSourceID="AccessDataSource1"
DataKeyNames="ThingID" DefaultMode="Insert">
<InsertItemTemplate>
<asp:Wizard ID="Wizard1" runat="server" ActiveStepIndex="0"
OnFinishButtonClick="Wizard1_FinishButtonClick">
<WizardSteps>
<asp:WizardStep ID="WizardStep1" runat="server" Title="Step 1">Step1Data:
<asp:TextBox ID="Step1DataTextBox" runat="server" Text='<%#
Bind("Step1Data") %>'></asp:TextBox><br />
</asp:WizardStep>
<asp:WizardStep ID="WizardStep2" runat="server" Title="Step 2">Step2Data:
<asp:TextBox ID="Step2DataTextBox" runat="server" Text='<%#
Bind("Step2Data") %>'></asp:TextBox><br />
</asp:WizardStep>
<asp:WizardStep ID="WizardStep3" runat="server" Title="Step 3">Step3Data:
<asp:TextBox ID="Step3DataTextBox" runat="server" Text='<%#
Bind("Step3Data") %>'></asp:TextBox><br />
</asp:WizardStep>
<asp:WizardStep ID="WizardStep4" runat="server" Title="Step 4">Step4Data:
<asp:TextBox ID="Step4DataTextBox" runat="server" Text='<%#
Bind("Step4Data") %>'></asp:TextBox><br />
</asp:WizardStep>
</WizardSteps>
</asp:Wizard>
</InsertItemTemplate>
</asp:FormView>
</div>
</form>
</body>
</html>
my fake-address as given to me by Microsoft so that I can be guraranteed a
response from a support representative. Sorry for the repost.
I'd like to make use of the asp:Wizard control to present a step-by-step
guided experience for my user to fill out a complicated data-entry form.
I'd like to make use of two-way databinding provided by the asp:FormView
control to drasticly reduce the number of lines of code I need to write.
But when I combine those two controls, databinding breaks. Please see the
example below. The database in this example is a simple access database with
a single table My real life example is way to complicated to describe here,
but this simple case reproduces the problem.
If you run through the wizard, clicking Finish causes a record to be
inserted with null values in all the fields. What I don't show here, is if
you strip out the wizard control, everything works fine.
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Wizard1_FinishButtonClick(object sender,
WizardNavigationEventArgs e)
{
FormView1.InsertItem(true);
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:AccessDataSource ID="AccessDataSource1" runat="server"
DataFile="~/App_Data/db1.mdb"
InsertCommand="INSERT INTO [Thing] ([Step1Data], [Step2Data], [Step3Data],
[Step4Data]) VALUES (?, ?, ?, ?)"
SelectCommand="SELECT * FROM [Thing]">
<InsertParameters>
<asparameter Name="Step1Data" Type="String" />
<asparameter Name="Step2Data" Type="String" />
<asparameter Name="Step3Data" Type="String" />
<asparameter Name="Step4Data" Type="String" />
</InsertParameters>
</asp:AccessDataSource>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataKeyNames="ThingID"
DataSourceID="AccessDataSource1">
<Columns>
<asp:BoundField DataField="ThingID" HeaderText="ThingID"
InsertVisible="False" ReadOnly="True"
SortExpression="ThingID" />
<asp:BoundField DataField="Step1Data" HeaderText="Step1Data"
SortExpression="Step1Data" />
<asp:BoundField DataField="Step2Data" HeaderText="Step2Data"
SortExpression="Step2Data" />
<asp:BoundField DataField="Step3Data" HeaderText="Step3Data"
SortExpression="Step3Data" />
<asp:BoundField DataField="Step4Data" HeaderText="Step4Data"
SortExpression="Step4Data" />
</Columns>
</asp:GridView>
<asp:FormView ID="FormView1" runat="server" DataSourceID="AccessDataSource1"
DataKeyNames="ThingID" DefaultMode="Insert">
<InsertItemTemplate>
<asp:Wizard ID="Wizard1" runat="server" ActiveStepIndex="0"
OnFinishButtonClick="Wizard1_FinishButtonClick">
<WizardSteps>
<asp:WizardStep ID="WizardStep1" runat="server" Title="Step 1">Step1Data:
<asp:TextBox ID="Step1DataTextBox" runat="server" Text='<%#
Bind("Step1Data") %>'></asp:TextBox><br />
</asp:WizardStep>
<asp:WizardStep ID="WizardStep2" runat="server" Title="Step 2">Step2Data:
<asp:TextBox ID="Step2DataTextBox" runat="server" Text='<%#
Bind("Step2Data") %>'></asp:TextBox><br />
</asp:WizardStep>
<asp:WizardStep ID="WizardStep3" runat="server" Title="Step 3">Step3Data:
<asp:TextBox ID="Step3DataTextBox" runat="server" Text='<%#
Bind("Step3Data") %>'></asp:TextBox><br />
</asp:WizardStep>
<asp:WizardStep ID="WizardStep4" runat="server" Title="Step 4">Step4Data:
<asp:TextBox ID="Step4DataTextBox" runat="server" Text='<%#
Bind("Step4Data") %>'></asp:TextBox><br />
</asp:WizardStep>
</WizardSteps>
</asp:Wizard>
</InsertItemTemplate>
</asp:FormView>
</div>
</form>
</body>
</html>