I have asp:DetailsView
in popup (I use modalpopupextender) and I have dropdownlist
inside detailsview
with autopostback. DetailView
is inside updatepanel
. But when I change value of dropdownlist
the PageLoad function is called anyway, and dropdown
index changes to 0.
<asp:Button ID="FakeClickButton5" runat="server" Text="FakeButton" CssClass="hideButton" />
<asp:Panel ID="PopupPanelDetail" runat="server" CssClass="modalPopup" >
<asp:Panel ID="Panel6" runat="server" >
<asp:UpdatePanel ID="uptblTest" UpdateMode="Conditional" runat="server">
<ContentTemplate>
<asp:DetailsView ID="DetailsViewMain" runat="server" AutoGenerateRows="false"
DataKeyNames="Id" DataSourceID="ObjectDataSourceDetailMain" Height="50px"
onitemcommand="DetailsViewMain_ItemCommand"
oniteminserted="DetailsViewMain_ItemInserted"
Width="250px" >
<Fields>
<asp:BoundField DataField="Id" HeaderText="Id"
InsertVisible="False" ReadOnly="True" SortExpression="Id"
Visible="False" />
<asp:BoundField DataField="name" HeaderText="name"
SortExpression="name" />
<asp:TemplateField HeaderText="Type">
<ItemTemplate>
<asp:DropDownList ID="ddType" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddType_OnSelectedIndexChanged" onload="ddType_Load">
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField ShowEditButton="True" ShowInsertButton="True"
Visible="False" />
</Fields>
<HeaderStyle CssClass="bold" HorizontalAlign="Center"></HeaderStyle>
</asp:DetailsView>
<asp:Panel ID="Panel7" runat="server">
<asp:LinkButton ID="SaveDetailLinkButton" runat="server" CausesValidation="True"
onclick="SaveDetailLinkButton_Click" SkinID="blackButton" ValidationGroup="ServiceValidation">Save</asp:LinkButton>
<asp:LinkButton ID="CancelDetailLinkButton3" runat="server"
onclick="CancelDetailLinkButton3_Click" SkinID="blackButton">Cancel</asp:LinkButton>
</asp:Panel>
<asp:ObjectDataSource ID="ObjectDataSourceDetailMain" runat="server"
InsertMethod="InsertParam"
SelectMethod="GetParamByID"
UpdateMethod="UpdateParam"
TypeName="DatasorceMatch"
DataObjectTypeName="ParamCustom"
OldValuesParameterFormatString="original_{0}"
oninserting="ObjectDataSourceDetailMain_Inserting" >
<SelectParameters>
<asp:ControlParameter ControlID="GridViewParams" Name="Id"
PropertyName="SelectedDataKey.Value" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Panel>
</asp:Panel>
<ajaxToolkit:ModalPopupExtender ID="ModalPopupExtenderDetails" runat="server"
PopupControlID="PopupPanelDetail" TargetControlID="FakeClickButton2"
BackgroundCssClass="modalBackground" />
actually it's strange that dropdownlist reloaded because update panel mode is conditional and I don't update it in code.
Here is my server code:
protected void Page_Load(object sender, EventArgs e)
{
}
protected void DetailsViewMain_ItemCommand(object sender, DetailsViewCommandEventArgs e)
{
if (e.CommandName == "Cancel")
{
DetailsViewMain.Visible = false;
}
}
protected void DetailsViewMain_ItemInserted(object sender, DetailsViewInsertedEventArgs e)
{
GridViewParams.DataBind();
DetailsViewMain.Visible = false;
}
protected void SaveDetailLinkButton_Click(object sender, EventArgs e)
{
Page.Validate();
if (Page.IsValid)
{
GridViewParams.SelectedIndex = -1;
if (DetailsViewMain.CurrentMode == DetailsViewMode.Edit)
{
DetailsViewMain.UpdateItem(true);
}
if (DetailsViewMain.CurrentMode == DetailsViewMode.Insert)
{
DetailsViewMain.InsertItem(true);
}
ModalPopupExtenderDetails.Hide();
GridViewParams.DataBind();
}
else
{
ModalPopupExtenderDetails.Show();
}
}
protected void CancelDetailLinkButton3_Click(object sender, EventArgs e)
{
ModalPopupExtenderDetails.Hide();
GridViewParams.SelectedIndex = -1;
GridViewParams.DataBind();
}
protected void ObjectDataSourceDetailMain_Inserting(object sender, ObjectDataSourceMethodEventArgs e)
{
//int selectedID_ofType = (int)ViewState[viewState_typeID];
int selectedID_ofType = int.Parse(dropDownList_ddType.SelectedValue);
((ParamCustom)e.InputParameters[0]).typeID = selectedID_ofType;
}
protected void ddType_Load(object sender, EventArgs e)
{
dropDownList_ddType = (DropDownList)sender;
if (DetailsViewMain.CurrentMode == DetailsViewMode.Insert)
{
((DropDownList)sender).Items.Clear();
((DropDownList)sender).Items.Add(new ListItem(@"Choose", (0).ToString()));
foreach (ParamType paramType in DBHelper.sharedInstance().getAllParamTypes())
{
ListItem listItem = new ListItem(paramType.name, paramType.id.ToString());
((DropDownList)sender).Items.Add(listItem);
}
}
}
protected void ddType_OnSelectedIndexChanged(object sender, EventArgs e)
{
//int selectedID_ofType = int.Parse(((DropDownList)sender).SelectedValue);
//ViewState[viewState_typeID] = selectedID_ofType;
}
What I need is just to change values of dropdownlist without page reloading or without popup disappearing and save this value.