1
DataList select/unselect가 작동하는 방법을 이해하는 데 어려움을 겪고 있습니다. 나는 인상에 따라 SelectedIndex를 설정할 때 DL이 아이템 디스플레이를 적절한 템플릿으로 바꿀 것입니다.Strange DataList 선택/선택 취소 동작
표시되는 동작은 다음과 같습니다. 1. 항목 스타일 변경을 선택하지만 템플릿은 이 아닙니다. 2. 처음 선택한 항목의 템플릿이 다시 변경됩니다.
<%@ Page Language="C#" Trace="true" %>
<%@ Import Namespace="System.Data" %>
<script runat="server">
// Method to handle DataList ItemCommand
protected void dl_ItemCommand(object sender, DataListCommandEventArgs e)
{
DataList dl = sender as DataList;
if (e == null || e.Item == null)
{
Trace.Write("dl_ItemCommand", "EventArgs.Item is null");
throw new Exception("dl_ItemCommand: EventArgs.Item is null");
}
int selIdx = dl.SelectedIndex;
Trace.Write("dl_ItemCommand", String.Format("{0}: {1}",
e.CommandName.ToLower(), e.Item.ItemIndex));
switch (e.CommandName.ToLower())
{
case "select":
selIdx = e.Item.ItemIndex;
break;
case "unselect":
selIdx = -1;
break;
}
if (selIdx != dl.SelectedIndex)
dl.SelectedIndex = selIdx;
}
</script>
<html>
<head>
<title>Test</title>
</head>
<body style="padding: 20px;">
<form runat="server" id="form1">
<asp:DataList ID="dl" runat="server"
CellPadding="1" CellSpacing="1" BorderWidth="0px" Width="100%"
DataSourceID="ds" OnItemCommand="dl_ItemCommand">
<SeparatorTemplate>
<hr />
</SeparatorTemplate>
<ItemTemplate>
<asp:Button ID="Button1" CommandName="select" runat="server" />
Summary: <%# XPath("ID") %>
<br />
</ItemTemplate>
<ItemStyle CssClass="ListItem" />
<SelectedItemTemplate>
<asp:Button ID="Button2" CommandName="unselect" runat="server" />
<b>Detail: <%# XPath("ID")%></b>
<br />
</SelectedItemTemplate>
<SelectedItemStyle BackColor="#f8f8f8" BorderColor="#888888" BorderStyle="Solid"
BorderWidth="1px" />
</asp:DataList>
<asp:XmlDataSource ID="ds" runat="server" XPath="/List/Item">
<Data>
<List>
<Item><ID>1889</ID></Item>
<Item><ID>1890</ID></Item>
<Item><ID>790</ID></Item>
<Item><ID>4584</ID></Item>
<Item><ID>4368</ID></Item>
<Item><ID>4546</ID></Item>
</List>
</Data>
</asp:XmlDataSource>
</form>
</body>
</html>
어떤 도움이 것 : - 3. 다른 다시 항목을 선택 # 2 템플릿에서 선택한 항목이 나는 충실하게 나를 위해 동작을 재현 다음 코드를 만들었습니다
4 등 .. 변경 대단히 감사하겠습니다.
감사합니다.
을 시도 놓친
dl_ItemCommand
입니다. 수동 databind 호출이 필요한 이유는 무엇입니까? EnableViewState = "false"로 설정하면 데이터 소스에 대한 호출이 여러 번 발생합니다. 데이터 소스가 SQL 데이터 소스 인 경우 (실제 코드의 경우처럼) 동일한 정보에 대해 여러 DB 호출이 발생합니다. 이것은 틀린가? – saarp맞습니다.하지만 EnableViewState = false로 설정하면 Http 요청에서 값이 보존되지 않습니다. EnableViewState가 false이면 컨트롤 상태를 사용하여 컨트롤에 고유 한 속성 정보를 유지할 수 있으며 해제 할 수 없습니다 뷰 상태 속성과 같습니다. –