在PostBack中为GridView设置下拉列表选择的值时,ID会错误地递增。
我有一个GridView,当页面加载时,它从数据库中提取数据并填充GridView。如果我保存GridView并运行PostBack,则DropdownList的ID将错误地递增。也就是说,当页面加载时,Dropdowlist的ID为:
DataTables_Table_0_Drop0_0
DataTables_Table_0_Drop0_1
,但回发后ID更改为:
DataTables_Table_0_Drop0_0
DataTables_Table_0_Drop1_1
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
MySqlConnection connection = new MySqlConnection(Global.conn);
connection.Open();
MySqlCommand command = connection.CreateCommand();
string sql = "select bankstatements.bankstatementid as bankstatementid, bankstatements.note as note, bankstatements.PortfolioId as PortfolioId, uniquePortfolioName, bankstatements.bankstatementdate as Date, bankstatements.referencenumber as 'Reference Number', " +
" bankstatements.heading as Title, bankstatements.description as Description, " +
" bankstatements.code as Code, bankstatements.bundle as Bundle," +
" bankstatements.deposit as Deposit, bankstatements.withdrawal as Withdrawal, " +
" bankstatements.total as 'Running Total', Concat(type_currency.currency,'-',type_currency.country) as Currency, " +
" type_bank.bankname as Bank " +
" from bankstatements_temp " +
" inner join bankstatements " +
" on bankstatements.referencenumber = bankstatements_temp.referencenumber " +
" and bankstatements.bankstatementdate = bankstatements_temp.bankstatementdate " +
" and bankstatements.currency = bankstatements_temp.currency " +
" and bankstatements.Bank = bankstatements_temp.Bank " +
" inner join type_bank on bankstatements_temp.bank=type_bank.bankid " +
" left join portfolio on bankstatements.PortfolioId=portfolio.portfolioid " +
" inner join type_currency on bankstatements_temp.currency=type_currency.currencyid " +
" order by bankstatements.bankstatementdate, bankstatements.bankstatementid asc ";
command.CommandText = sql;
DataTable dataTable = new DataTable();
MySqlDataAdapter da = new MySqlDataAdapter(command);
da.Fill(dataTable);
totalNumberofEntries = dataTable.Rows.Count;
DataTables_Table_0.DataSource = dataTable;
DataTables_Table_0.DataBind();
connection.Close();
connection.Dispose();
}
else
{
int counter = 0;
foreach (GridViewRow gridRow in DataTables_Table_0.Rows)
{
DropDownList dropDownList = gridRow.FindControl("txtProfileList") as DropDownList;
HiddenField HiddenProfileId = gridRow.FindControl("txtHiddenProfileId") as HiddenField;
if (HiddenProfileId.Value != "")
{
dropDownList.SelectedValue = HiddenProfileId.Value;
}
dropDownList.ID = "Drop" + counter;
counter++;
PortfolioObject portfolios = new PortfolioObject();
DataTable dataTable = portfolios.getPortfolioUniquePortfolioName();
dropDownList.DataSource = dataTable;
dropDownList.DataValueField = "portfolioid";
dropDownList.DataTextField = "uniquePortfolioName";
dropDownList.EnableViewState = true;
dropDownList.DataBind();
dropDownList.Items.Insert(0, new ListItem("None", ""));
}
}
}
protected void gvBookings_RowDataBound(object sender, GridViewRowEventArgs e)
{
int counter = 0;
if (e.Row.RowType == DataControlRowType.Header)
{
e.Row.TableSection = TableRowSection.TableHeader;
}
if (e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList dropDownList = e.Row.FindControl("txtProfileList") as DropDownList;
HiddenField HiddenProfileId = e.Row.FindControl("txtHiddenProfileId") as HiddenField;
if (HiddenProfileId.Value != "")
{
dropDownList.SelectedValue = HiddenProfileId.Value;
dropDownList.ID = "Drop" + counter;
counter++;
PortfolioObject portfolios = new PortfolioObject();
DataTable dataTable = portfolios.getPortfolioUniquePortfolioName();
dropDownList.DataSource = dataTable;
dropDownList.DataValueField = "portfolioid";
dropDownList.DataTextField = "uniquePortfolioName";
dropDownList.EnableViewState = true;
dropDownList.DataBind();
dropDownList.Items.Insert(0, new ListItem("None", ""));
}
}
}
aspx页面如下:
<asp:GridView ID="DataTables_Table_0" OnPageIndexChanging="GridView1_PageIndexChanging" aria-describedby="DataTables_Table_0_info" role="grid" class="table col-md-12" runat="server" CellPadding="4" ForeColor="#333333" GridLines="None" AutoGenerateColumns="false" OnRowDataBound="gvBookings_RowDataBound" OnRowCommand="gvBookings_RowDeleting" >
<Columns>
<asp:TemplateField HeaderText="Portfolio">
<ItemTemplate>
<asp:HiddenField runat="server" ID="txtHiddenId" Value='<%# Eval("bankstatementid") %>' />
<asp:DropDownList ID="txtProfileList" runat="server" AutoPostback="false" EnableViewState="true" Onchange=<%# String.Format("show_Save_Button({0});", Container.DataItemIndex) %> Style="width: 150px" class="form-control" ></asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Allocated Portfolio" >
<ItemTemplate >
<asp:HiddenField runat="server" ID="txtHiddenProfileId" Value='<%# Eval("PortfolioId") %>' />
<asp:Label runat="server" ID="txtExistingPortfolio" Text='<%# Eval("uniquePortfolioName") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Notes" >
<ItemTemplate >
<asp:TextBox Width="200" runat="server" Class="form-control" ID="txtNote" EnableViewState="true" Text='<%# Eval("note") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Dates">
<ItemTemplate>
<%# Eval("Date", "{0:dd-MMM-yyyy}") %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Reference Number">
<ItemTemplate>
<asp:Label ID="lblReferenceNumber" runat="server"
Text='<%# Eval("Reference Number") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Title">
<ItemTemplate>
<asp:Label ID="lblTitle" runat="server" Text='<%# Eval("Title") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Description">
<ItemTemplate>
<asp:Label ID="lblDescription" runat="server" Text='<%# Eval("Description") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Code">
<ItemTemplate>
<asp:Label ID="lblCode" runat="server" Text='<%# Eval("Code") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Bundle">
<ItemTemplate>
<asp:Label ID="lblBundle" runat="server" Text='<%# Eval("Bundle") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Deposit">
<ItemTemplate>
<asp:Label ID="lblDeposit" runat="server" Text='<%# Eval("Deposit","{0:n}") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Withdrawal">
<ItemTemplate>
<asp:Label ID="lblWithdrawal" runat="server" Text='<%# Eval("Withdrawal","{0:n}") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Running Total">
<ItemTemplate>
<asp:Label ID="lblRunningTotal" runat="server" Text='<%# Eval("Running Total","{0:n}") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Currency">
<ItemTemplate>
<asp:Label ID="lblCurrency" runat="server" Text='<%# Eval("Currency") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Bank">
<ItemTemplate>
<asp:Label ID="lblBank" runat="server" Text='<%# Eval("Bank") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Action">
<ItemTemplate>
<asp:LinkButton ID="Remove_Button" runat="server" CausesValidation="false" CommandName="Remove" Text="Delete" CommandArgument='<%# Eval("bankstatementid") %>' OnClientClick="return confirm('Are you sure you want to delete this entry?');" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>