Hi gurus, thanks for all your past help.
I hope you can help me once more.
On my form, I have both a GridView control and Repeater control.
Reason I am using both is that Repeater allows me to have multi row columns while Gridview doesn't allow that.
Anyway, per the code posted below, if I run that GridView as written in the code, it works fine.
In other words, if I click Add to add more rows, with just GridView, it works because I can add as many rows as I want.
If however, I have both GridView and Repeater, only Repeater works when I click Add but Gridview no longer works. It gives me the following error:
Column 'boatregNum' does not belong to table
Table1.
Any ideas how to fix this?
<table border="1" style="width:50%;text-align:center">
<tr>
<td style="width:100%;vertical-align: text-top;">
<asp:GridView ID="Gridview1" Style="table-layout: fixed;" runat="server" ShowFooter="true"
AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="RowNumber" Visible="false" HeaderText="Row Number" />
<asp:TemplateField HeaderText="Aircraft Registration #:">
<HeaderStyle HorizontalAlign="Left" />
<ItemTemplate>
<asp:TextBox ID="txtboatregNum" runat="server" Style="width: 593px;" class="form-control"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="TaxPayer Returned Value <br />As of Jan This Year">
<ItemStyle HorizontalAlign="Left"></ItemStyle>
<ItemTemplate>
<asp:TextBox ID="txttaxpayerret" runat="server" Style="width: 326px;" class="form-control txttaxpayerret numeric"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="For Tax Office use Only <br /> (Tax Assessirs Value)">
<ItemStyle HorizontalAlign="Left"></ItemStyle>
<ItemTemplate>
<asp:TextBox ID="txtfortaxofficeonly" runat="server" Style="width: 305px; background-color: #ECECEC;"
ReadOnly="true" class="form-control"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="">
<HeaderStyle Width="70" />
<ItemStyle Width="70" />
<ItemTemplate>
<asp:Button ID="ButtonAdd" runat="server" Text="Add" OnClick="ButtonAdd_Click" CssClass="grvAddButton" />
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField ShowDeleteButton="True">
<ControlStyle CssClass="grvDelButton" />
</asp:CommandField>
</Columns>
</asp:GridView></td>
</tr>
</table>
<table border="1" style="width:80%;text-align:center">
<tr>
<td style="vertical-align: text-top;" class="auto-style8">
<asp:Repeater ID="Repeater2" runat="server">
<ItemTemplate>
<table style="width:100%;border: 1px solid black;">
<tr>
<td style="width:50%;border-collapse: collapse;border: 1px solid black;white-space:nowrap;">
Registration "N" #:<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox></td>
<td style="text-align:center;border: 1px solid black;">AVIONICS AND EXTRA EQUIPMENT
</td>
</tr>
<tr>
<td style="width:50%;border-collapse: collapse;border: 1px solid black;white-space:nowrap;">
MFG. Name: (make):<asp:TextBox ID="TextBox3" runat="server"></asp:TextBox></td>
<td style="width:50%;text-align:center;border: 1px solid black;">
</td>
</tr>
<tr>
<td style="width:50%;border-collapse: collapse;border: 1px solid black;white-space:nowrap;">
Model Name OR #::<asp:TextBox ID="TextBox4" runat="server"></asp:TextBox></td>
<td style="width:50%;text-align:center;border: 1px solid black;">
</td>
</tr>
<tr>
<td style="width:50%;border-collapse: collapse;border: 1px solid black;white-space:nowrap;">
Year Built:<asp:TextBox ID="TextBox5" runat="server"></asp:TextBox></td>
<td style="width:50%;text-align:center;border: 1px solid black;">
</td>
</tr>
<tr>
<td style="width:50%;border-collapse: collapse;border: 1px solid black;white-space:nowrap;">
Serial Number:<asp:TextBox ID="TextBox6" runat="server"></asp:TextBox></td>
<td style="width:50%;text-align:center;border: 1px solid black;">
</td>
</tr>
<tr>
<td style="width:50%;border-collapse: collapse;border: 1px solid black;white-space:nowrap;">
Date Purchased:<asp:TextBox ID="txtdatePurchased" runat="server"></asp:TextBox></td>
<td style="width:50%;text-align:center;border: 1px solid black;">
</td>
</tr>
<tr>
<td style="width:50%;border-collapse: collapse;border: 1px solid black;">
Purchased:<asp:radiobuttonlist ID="rblPurchaseType" runat="server" RepeatDirection="Horizontal" TextAlign="Right" style="display:inline;"></asp:radiobuttonlist></td>
<td style="text-align:center;border: 1px solid black;">
</td>
</tr>
<tr>
<td style="width:50%;border-collapse: collapse;border: 1px solid black;white-space:nowrap;">
Cost:<asp:TextBox ID="TextBox9" runat="server"></asp:TextBox></td>
<td style="text-align:center;border: 1px solid black;">
</td>
</tr>
<tr>
<td style="width:50%;border-collapse: collapse;border: 1px solid black;white-space:nowrap;">
Hours Between Overhauls(TBO):<asp:TextBox ID="TextBox7" runat="server"></asp:TextBox></td>
<td style="text-align:center;border: 1px solid black;">
</td>
</tr>
<tr>
<td style="width:50%;border-collapse: collapse;border: 1px solid black;white-space:nowrap;">
Hours Since Last OVerhaul:<asp:TextBox ID="TextBox8" runat="server"></asp:TextBox></td>
<td style="text-align:center;border: 1px solid black;">
</td>
</tr>
<tr>
<td style="width:50%;border-collapse: collapse;border: 1px solid black;white-space:nowrap;">
Last Overhaul:<asp:RadioButtonList ID="rbllastOverHaul" runat="server" RepeatDirection="Horizontal" TextAlign="Right" style="display:inline;">
<asp:ListItem Text="Major" />
<asp:ListItem Text="Top" />
</asp:RadioButtonList></td>
<td style="text-align:center;border: 1px solid black;">
</td>
</tr>
<tr>
<td style="width:50%;border-collapse: collapse;border: 1px solid black;white-space:nowrap;">
Total Hours On Airframe As of Jan. 1:<asp:TextBox ID="TextBox10" runat="server"></asp:TextBox></td>
<td style="border: 1px solid black;">
NOTE: Please submit a copy of your log book to substantiate T.B.O. and<br />airframe hours.
</td>
<td><asp:Button ID="ButtonAdd2" runat="server" Text="Add" OnClick="ButtonAdd2_Click" CssClass="grvAddButton" /></td>
</tr>
</table>
</ItemTemplate>
</asp:Repeater></td>
</tr>
</table>
CodeBehind
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
SetInitialRow();
SetInitialRow2();
//BindList();
}
SqlConnection conn = new SqlConnection(connStr);
conn.Open();
SqlCommand command = new SqlCommand("select sum(TaxPyrRetdVal) as GrandTotal from AircraftInfo", conn);
// int result = command.ExecuteNonQuery();
using (SqlDataReader reader = command.ExecuteReader())
{
if (reader.Read())
{
// lblTotal.Text = Convert.ToInt32("GrandTotal");
}
}
conn.Close();
}
private void SetInitialRow()
{
DataTable dt = new DataTable();
DataRow dr = null;
dt.Columns.Add(new DataColumn("RowNumber", typeof(string)));
dt.Columns.Add(new DataColumn("boatregNum", typeof(string)));
dt.Columns.Add(new DataColumn("taxpayerret", typeof(string)));
dt.Columns.Add(new DataColumn("fortaxofficeonly", typeof(string)));
dr = dt.NewRow();
dr["RowNumber"] = 1;
dr["boatregNum"] = string.Empty;
dr["taxpayerret"] = string.Empty;
dr["fortaxofficeonly"] = string.Empty;
dt.Rows.Add(dr);
//dr = dt.NewRow();
//Store the DataTable in ViewState
ViewState["CurrentTable"] = dt;
Gridview1.DataSource = dt;
Gridview1.DataBind();
}
private void SetInitialRow2()
{
DataTable dt = new DataTable();
DataRow dr = null;
//Create DataTable columns
dt.Columns.Add(new DataColumn("RowNumber", typeof(string)));
dt.Columns.Add(new DataColumn("TextBox2", typeof(string)));
dt.Columns.Add(new DataColumn("TextBox3", typeof(string)));
dt.Columns.Add(new DataColumn("TextBox4", typeof(string)));
dt.Columns.Add(new DataColumn("TextBox5", typeof(string)));
dt.Columns.Add(new DataColumn("TextBox6", typeof(string)));
dt.Columns.Add(new DataColumn("txtdatePurchased", typeof(string)));
dt.Columns.Add(new DataColumn("rblPurchaseType", typeof(string)));
dt.Columns.Add(new DataColumn("TextBox9", typeof(string)));
dt.Columns.Add(new DataColumn("TextBox7", typeof(string)));
dt.Columns.Add(new DataColumn("TextBox8", typeof(string)));
dt.Columns.Add(new DataColumn("rbllastOverHaul", typeof(string)));
dt.Columns.Add(new DataColumn("TextBox10", typeof(string)));
//Create Row for each columns
dr = dt.NewRow();
dr["RowNumber"] = 1;
dr["TextBox2"] = string.Empty;
dr["TextBox3"] = string.Empty;
dr["TextBox4"] = string.Empty;
dr["TextBox5"] = string.Empty;
dr["TextBox6"] = string.Empty;
dr["txtdatePurchased"] = string.Empty;
dr["rblPurchaseType"] = string.Empty;
dr["TextBox9"] = string.Empty;
dr["TextBox7"] = string.Empty;
dr["TextBox8"] = string.Empty;
dr["rbllastOverHaul"] = string.Empty;
dr["TextBox10"] = string.Empty;
dt.Rows.Add(dr);
//Store the DataTable in ViewState for future reference
ViewState["CurrentTable"] = dt;
//Bind the Repeater with the DataTable
Repeater2.DataSource = dt;
Repeater2.DataBind();
}
private void AddNewRow()
{
int rowIndex = 0;
if (ViewState["CurrentTable"] != null)
{
DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"];
DataRow drCurrentRow = null;
if (dtCurrentTable.Rows.Count > 0)
{
for (int i = 1; i <= dtCurrentTable.Rows.Count; i++)
{
//extract the TextBox values
TextBox tbboatregNum = (TextBox)Gridview1.Rows[rowIndex].Cells[1].FindControl("txtboatregNum");
TextBox tbtaxpayerret = (TextBox)Gridview1.Rows[rowIndex].Cells[2].FindControl("txttaxpayerret");
TextBox tbfortaxofficeonly = (TextBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("txtfortaxofficeonly");
drCurrentRow = dtCurrentTable.NewRow();
drCurrentRow["RowNumber"] = i + 1;
dtCurrentTable.Rows[i - 1]["boatregNum"] = tbboatregNum.Text;
dtCurrentTable.Rows[i - 1]["taxpayerret"] = tbtaxpayerret.Text;
dtCurrentTable.Rows[i - 1]["fortaxofficeonly"] = tbfortaxofficeonly.Text;
rowIndex++;
}
dtCurrentTable.Rows.Add(drCurrentRow);
ViewState["CurrentTable"] = dtCurrentTable;
Gridview1.DataSource = dtCurrentTable;
Gridview1.DataBind();
}
}
else
{
Response.Write("ViewState is null");
}
//Set Previous Data on Postbacks
SetPreviousData();
}
private void AddNewRow2()
{
int rowIndex = 0;
if (ViewState["CurrentTable"] != null)
{
DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"];
DataRow drCurrentRow = null;
if (dtCurrentTable.Rows.Count > 0)
{
for (int i = 1; i <= dtCurrentTable.Rows.Count; i++)
{
//extract the TextBox values
TextBox tbTextBox2 = (TextBox)Repeater2.Items[rowIndex].FindControl("TextBox2");
TextBox tbTextBox3 = (TextBox)Repeater2.Items[rowIndex].FindControl("TextBox3");
TextBox tbTextBox4 = (TextBox)Repeater2.Items[rowIndex].FindControl("TextBox4");
TextBox tbTextBox5 = (TextBox)Repeater2.Items[rowIndex].FindControl("TextBox5");
TextBox tbTextBox6 = (TextBox)Repeater2.Items[rowIndex].FindControl("TextBox6");
TextBox tbdatePurchased = (TextBox)Repeater2.Items[rowIndex].FindControl("txtdatePurchased");
RadioButtonList tbPurchaseType = (RadioButtonList)Repeater2.Items[rowIndex].FindControl("rblPurchaseType");
TextBox tbTextBox9 = (TextBox)Repeater2.Items[rowIndex].FindControl("TextBox9");
//Create new row in DataTable and set its values
drCurrentRow = dtCurrentTable.NewRow();
drCurrentRow["RowNumber"] = i + 1;
dtCurrentTable.Rows[i - 1]["TextBox2"] = tbTextBox2.Text;
dtCurrentTable.Rows[i - 1]["TextBox3"] = tbTextBox3.Text;
dtCurrentTable.Rows[i - 1]["TextBox4"] = tbTextBox4.Text;
dtCurrentTable.Rows[i - 1]["TextBox5"] = tbTextBox5.Text;
dtCurrentTable.Rows[i - 1]["TextBox6"] = tbTextBox6.Text;
dtCurrentTable.Rows[i - 1]["txtdatePurchased"] = tbdatePurchased.Text;
dtCurrentTable.Rows[i - 1]["rblPurchaseType"] = tbPurchaseType.Text;
dtCurrentTable.Rows[i - 1]["TextBox9"] = tbTextBox9.Text;
rowIndex++;
}
//add the new row to the current DataTable
dtCurrentTable.Rows.Add(drCurrentRow);
//store the current DataTable in ViewState
ViewState["CurrentTable"] = dtCurrentTable;
//rebind the Repeater with the updated DataTable
Repeater2.DataSource = dtCurrentTable;
Repeater2.DataBind();
}
}
else
{
Response.Write("ViewState is null");
}
//Set Previous Data on Postbacks
SetPreviousData2();
}
private void SetPreviousData()
{
int rowIndex = 0;
if (ViewState["CurrentTable"] != null)
{
DataTable dt = (DataTable)ViewState["CurrentTable"];
if (dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
TextBox tbboatregNum = (TextBox)Gridview1.Rows[rowIndex].Cells[1].FindControl("txtboatregNum");
TextBox tbtaxpayerret = (TextBox)Gridview1.Rows[rowIndex].Cells[2].FindControl("txttaxpayerret");
TextBox tbfortaxofficeonly = (TextBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("txtfortaxofficeonly");
tbboatregNum.Text = dt.Rows[i]["boatregNum"].ToString();
tbtaxpayerret.Text = dt.Rows[i]["taxpayerret"].ToString();
tbfortaxofficeonly.Text = dt.Rows[i]["fortaxofficeonly"].ToString();
rowIndex++;
}
}
}
}
private void SetPreviousData2()
{
int rowIndex = 0;
if (ViewState["CurrentTable"] != null)
{
DataTable dt = (DataTable)ViewState["CurrentTable"];
if (dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
TextBox tbTextBox2 = (TextBox)Repeater2.Items[rowIndex].FindControl("TextBox2");
TextBox tbTextBox3 = (TextBox)Repeater2.Items[rowIndex].FindControl("TextBox3");
tbTextBox2.Text = dt.Rows[i]["TextBox2"].ToString();
tbTextBox3.Text = dt.Rows[i]["TextBox3"].ToString();
rowIndex++;
}
}
}
}