Я не могу понять, как установить мое выбранное значение после привязки данных. Я сохраняю значение в переменной temp, а затем снова устанавливаю его после привязки, но он не работает.
Код за
protected void InsertButton_Click(object sender, EventArgs e)
{
var ctrl = (Control)sender;
var lvl = (ListViewItem)ctrl.NamingContainer;
var formSectionListBox = (ListBox)lvl.FindControl("formsection");
var temp = formSectionListBox.SelectedValue;
// Update ListView
ListView1.DataSource = SqlDataSource1;
ListView1.DataBind();
formSectionListBox.Items.FindByValue(temp).Selected = true;
}
ASP.net
<asp:ListView ID="ListView1" runat="server" InsertItemPosition="FirstItem" OnPagePropertiesChanged="ListView1_PagePropertiesChanged" OnItemEditing="ListView1_OnItemEditing" DataKeyNames="FormTitle" OnSelectedIndexChanged="ListView1_SelectedIndexChanged" OnItemCanceling="ListView1_OnItemCanceling" OnItemUpdating="ListView1_ItemUpdating" OnItemInserting="ListView1_ItemInserting" OnItemDeleting="ListView1_ItemDeleting">
<InsertItemTemplate>
<tr>
<td>
<asp:Button ID="InsertButton" runat="server" CommandName="Insert" Text="Insert" OnClick="InsertButton_Click" />
<asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="Clear" CausesValidation="False" />
</td>
<td>
<div style="height: auto; width: 250px; overflow: auto; border: solid; border-color: ActiveBorder">
<asp:ListBox ID="formsection" runat="server" DataSourceID="FormSectionDataSource" DataTextField="FormSection" DataValueField="FormSectionID" AppendDataBoundItems="True" SelectedValue='<%# Bind("FormSectionID") %>' Height="150px">
<asp:ListItem Value=""><- please select -></asp:ListItem>
</asp:ListBox>
</div>
</td>
</tr>
</InsertItemTemplate>
</asp:ListView>
делать
formSectionListBox.SelectedItem = temp;
вы также можете использовать свойство SelectedValue для установки его значением temp. Любой должен работать.
EDIT: поскольку в вашем случае temp был значением элемента. Я бы использовал
formSectionListBox.SelectedValue = temp;
В общем, помните, что многие из этих свойств являются Get AND Set, а не только Get :)
Вы можете попробовать привязать DropDownList в ItemDataBound
<asp:ListView ID="ListView1" runat="server"
...
OnItemDataBound="ListView1_ItemDataBound">
<InsertItemTemplate>
...
<asp:ListBox ID="formsection"
runat="server"
DataTextField="FormSection"
DataValueField="FormSectionID"
AppendDataBoundItems="True">
<asp:ListItem Value="">please select</asp:ListItem>
</asp:ListBox>
</InsertItemTemplate>
</asp:ListView>
protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)
{
if (e.Item.ItemType == ListViewItemType.DataItem)
{
var item = e.Item.DataItem as DataRowView;
var formsection = e.Item.FindControl("formsection") as ListBox;
formsection.DataSourceID = FormSectionDataSource;
formsection.DataBind();
formsection.SelectedValue = item["FormSectionID"].ToString();
}
else if (e.Item.ItemType == ListViewItemType.InsertItemTemplate||
e.Item.ItemType == ListViewItemType.EditItemTemplate)
{
... // Updated
}
}
ItemCreated
. Посмотрите на этот вопрос так для деталей.