Здравствуйте!
Есть редактируемый ListView (привожу лишь 3 основных шаблона):
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
<asp:ListView ID="LVSpSotrud" runat="server" DataKeyNames="SysKey"
DataSourceID="edsSotrud" OnItemCanceling="LVSpSotrud_ItemCanceling" OnDataBound="LVSpSotrud_DataBound"
OnSelectedIndexChanged="LVSpSotrud_SelectedIndexChanged" OnItemDataBound="LVSpSotrud_ItemDataBound"
OnSorting="LVSpSotrud_Sorting"
>
<EditItemTemplate>
<tr style="margin: 0px; padding: 0px">
<td style="margin: 0px; border: 1px ridge #006699; background-color: #FFFFFF">
<asp:ImageButton ID="ImgBUndo" runat="server" ImageUrl="~/Image/undo2.png" CommandName="Cancel" AlternateText="Отменить"/>
<asp:TextBox ID="tbxSysKey" runat="server" Text='<%# Bind("SysKey") %>' Visible="False" Width="20px" SkinID="MyTextBoxLV"></asp:TextBox>
<asp:ModalPopupExtender runat="server" ID="MyModalPopupVse"
TargetControlID="ImgBUndo"
PopupControlID="MyModalPupupPanelVse"
backgroundcssclass="ModalPopupBG"
OkControlID="ButOK">
</asp:ModalPopupExtender>
<asp:ConfirmButtonExtender ID="ImgBUndo_ConfirmButtonExtender" runat="server"
TargetControlID="ImgBUndo" Enabled="True" DisplayModalPopupID="MyModalPopupVse">
</asp:ConfirmButtonExtender>
</td>
<td style="margin: 0px; border: 1px solid #006699; background-color: #FFFFFF">
<asp:DropDownList ID="ddlPodraz" runat="server"
DataSourceID="EDSPodraz" DataTextField="NamePodr" DataValueField="SysKey"
SelectedValue='<%# Bind("SysPodrazd") %>' Width="250px" SkinID="MyLVDDL">
</asp:DropDownList>
</td>
<td style="margin: 0px; border: 1px solid #006699; background-color: #FFFFFF">
<asp:TextBox ID="tbxNameSotrud" runat="server" Text='<%# Bind("NameSotrud") %>' Width="250px" SkinID="MyTextBoxLV"></asp:TextBox>
<asp:RequiredFieldValidator ID="rvfNpp" runat="server" ErrorMessage="Поле <<Ф.И.О. сотрудника>> не должно быть пустым!!!"
ControlToValidate="tbxNameSotrud" ForeColor="Maroon" Font-NameMins="Times New Roman" Font-Size="Medium" ValidationGroup="MyMinValid">*</asp:RequiredFieldValidator>
</td>
<td style="margin: 0px; border: 1px solid #006699; background-color: #FFFFFF">
<asp:DropDownList ID="ddlNameDolg" runat="server"
DataSourceID="EDSDolgn" DataTextField="NameDolgn" DataValueField="SysKey"
SelectedValue='<%# Bind("SysDolgn") %>' Width="250px" SkinID="MyLVDDL">
</asp:DropDownList>
</td>
<td style="margin: 0px; border: 1px solid #006699; background-color: #FFFFFF">
<asp:TextBox ID="tbxDatePriem" runat="server" Text='<%# Bind("DatePriem") %>' Width="80px" SkinID="MyTextBoxLV"></asp:TextBox>
<asp:MaskedEditExtender ID="MaskedEditExtender1" runat="server"
TargetControlID="tbxDatePriem"
Mask="99/99/9999"
MessageValidatorTip="true"
OnFocusCssClass="MaskedEditFocus"
OnInvalidCssClass="MaskedEditError"
MaskType="Date"
DisplayMoney="Left"
AcceptNegative="Left"
ErrorTooltipEnabled="True" />
<asp:MaskedEditValidator ID="MaskedEditValidator1" runat="server"
ControlExtender="MaskedEditExtender1"
ControlToValidate="tbxDatePriem"
EmptyValueMessage="Дата не существует!!!"
InvalidValueMessage="Неправильная дата!!!"
Display="Dynamic"
TooltipMessage="Введите дату"
EmptyValueBlurredText="*"
InvalidValueBlurredMessage="*"
/>
<asp:ImageButton ID="ImgBntCalc1" runat="server" ImageUrl="~/Image/Calendar_scheduleHS.png" CausesValidation="False" Width="20px" Height="20px" ImageAlign="Middle" />
<asp:CalendarExtender ID="CalendarExtDatePriem" runat="server" TargetControlID="tbxDatePriem"
Format="dd.MM.yyyy" CssClass="MyCalendar" PopupButtonID="ImgBntCalc1" >
</asp:CalendarExtender>
</td>
<td style="margin: 0px; border: 1px solid #006699; background-color: #FFFFFF">
<asp:TextBox ID="tbxDateUvoln" runat="server" Text='<%# Bind("DateUvoln") %>' Width="80px" SkinID="MyTextBoxLV"></asp:TextBox>
<asp:MaskedEditExtender ID="MaskedEditExtender2" runat="server"
TargetControlID="tbxDateUvoln"
Mask="99/99/9999"
MessageValidatorTip="true"
OnFocusCssClass="MaskedEditFocus"
OnInvalidCssClass="MaskedEditError"
MaskType="Date"
DisplayMoney="Left"
AcceptNegative="Left"
ErrorTooltipEnabled="True" />
<asp:MaskedEditValidator ID="MaskedEditValidator2" runat="server"
ControlExtender="MaskedEditExtender1"
ControlToValidate="tbxDateUvoln"
EmptyValueMessage="Дата не существует!!!"
InvalidValueMessage="Неправильная дата!!!"
Display="Dynamic"
TooltipMessage="Введите дату"
EmptyValueBlurredText="*"
InvalidValueBlurredMessage="*"
/>
<asp:ImageButton ID="ImgBntCalc2" runat="server" ImageUrl="~/Image/Calendar_scheduleHS.png" CausesValidation="False" Width="20px" Height="20px" ImageAlign="Middle" />
<asp:CalendarExtender ID="CalendarExtDateUvoln" runat="server" TargetControlID="tbxDateUvoln"
Format="dd.MM.yyyy" CssClass="MyCalendar" PopupButtonID="ImgBntCalc2">
</asp:CalendarExtender>
</td>
</tr>
</EditItemTemplate>
<ItemTemplate>
<tr style="margin: 0px; padding: 0px">
<td style="margin: 0px; border: 1px ridge #006699; background-color: #FFFFFF">
<asp:ImageButton ID="ImgBSel" runat="server" ImageUrl="~/Image/ball_blue16.png" CommandName="Select" AlternateText="Выбрать"/>
<asp:Label ID="SysKeyLabel" runat="server" Text='<%# Eval("SysKey") %>' Visible="False" Width="20px" />
</td>
<td style="margin: 0px; border: 1px solid #006699; background-color: #FFFFFF">
<asp:Label ID="lbSysPodrazd" runat="server" Text='<%# Eval("SysPodrazd") %>' Visible="False" Width="20px" />
<asp:Label ID="lbNamePodraz" runat="server" Text="" Width="230px" SkinID="MyLabelLV" />
</td>
<td style="margin: 0px; border: 1px solid #006699; background-color: #FFFFFF">
<asp:Label ID="NameSotrudlabel" runat="server" Text='<%# Eval("NameSotrud") %>' Width="250px" SkinID="MyLabelLV" ClientIDMode="Static" />
</td>
<td style="margin: 0px; border: 1px solid #006699; background-color: #FFFFFF">
<asp:Label ID="lblSysDolgn" runat="server" Text='<%# Eval("SysDolgn") %>' Visible="False" Width="20px" />
<asp:Label ID="lblNameDolgn" runat="server" Text="" Width="230px" SkinID="MyLabelLV" />
</td>
<td style="margin: 0px; border: 1px solid #006699; background-color: #FFFFFF">
<asp:Label ID="LabelDatePriem" runat="server" Text='<%# Eval("DatePriem") %>' Visible="False" />
<asp:Label ID="LbDatePriem" runat="server" Text="" Width="80px" SkinID="MyLabelLV" ClientIDMode="Static" />
</td>
<td style="margin: 0px; border: 1px solid #006699; background-color: #FFFFFF">
<asp:Label ID="LabelDateUvoln" runat="server" Text='<%# Eval("DateUvoln") %>' Visible="False" />
<asp:Label ID="LbDateUvoln" runat="server" Text="" Width="80px" SkinID="MyLabelLV" ClientIDMode="Static" />
</td>
</tr>
</ItemTemplate>
<LayoutTemplate>
<table id="myTable" runat="server" style=" padding: 0px; text-align: center; vertical-align: middle; font-family: 'Times New Roman', Times, serif; font-size: 14px; border-spacing: 0px; width: 98%; color: #000000;" cellpadding="0" cellspacing="0" >
<tr id="header1" style="margin: 0px; padding: 0px; border-spacing: 0px;">
<th style="margin: 0px; border: 1px solid #006699; width: 40px; background-color: #99CCFF">
</th>
<th style="margin: 0px; border: 1px solid #006699; width: 250px; background-color: #99CCFF">
<asp:Label ID="Label5" runat="server" Text="Наименование подразделения" SkinID="MyLabelHeadLV"></asp:Label>
</th>
<th style="margin: 0px; border: 1px solid #006699; width: 250px; background-color: #99CCFF">
<asp:LinkButton ID="lnkCol2" runat="server" Text="Ф.И.О. сотрудника"
CommandName="sort" CommandArgument="NameSotrud" SkinID="LinkHeader"></asp:LinkButton>
<asp:Label ID="lbSortDir2" runat="server" Text="" SkinID="MyLabelSortDirect"></asp:Label>
</th>
<th style="margin: 0px; border: 1px solid #006699; width: 250px; background-color: #99CCFF">
<asp:Label ID="Label6" runat="server" Text="Должность" SkinID="MyLabelHeadLV"></asp:Label>
</th>
<th style="margin: 0px; border: 1px solid #006699; width: 100px; background-color: #99CCFF">
<asp:LinkButton ID="lnkCol4" runat="server" Text="Дата приема"
CommandName="sort" CommandArgument="DatePriem" SkinID="LinkHeader"></asp:LinkButton>
<asp:Label ID="lbSortDir4" runat="server" Text="" SkinID="MyLabelSortDirect"></asp:Label>
</th>
<th style="margin: 0px; border: 1px solid #006699; width: 100px; background-color: #99CCFF">
<asp:LinkButton ID="lnkCol5" runat="server" Text="Дата увольнения"
CommandName="sort" CommandArgument="DateUvoln" SkinID="LinkHeader"></asp:LinkButton>
<asp:Label ID="lbSortDir5" runat="server" Text="" SkinID="MyLabelSortDirect"></asp:Label>
</th>
</tr>
<tr ID="itemPlaceholder" runat="server" />
<tr style="text-align: center; vertical-align: middle">
<td colspan="6" style="border: 1px solid #006699; text-align: center; vertical-align: middle">
<asp:DataPager ID="DPLVSpSotrud" runat="server" PagedControlID="LVSpSotrud" PageSize="20">
<Fields>
<asp:NextPreviousPagerField ButtonType="Image" ShowFirstPageButton="False"
ShowNextPageButton="False" ShowPreviousPageButton="True" ButtonCssClass="pagerbutton" PreviousPageImageUrl="../Image/gnome_go_previous24.png" />
<asp:NumericPagerField NumericButtonCssClass="pagerbuttons" ButtonType="Button" CurrentPageLabelCssClass="pagerbuttonCurPage" ButtonCount="10" />
<asp:NextPreviousPagerField ButtonType="Image" ShowFirstPageButton="False" ButtonCssClass="pagerbutton"
ShowNextPageButton="True" ShowPreviousPageButton="False" ShowLastPageButton="False" NextPageImageUrl="../Image/gnome_go_next24.png" />
</Fields>
</asp:DataPager>
</td>
</tr>
<tr>
<td>
<table>
<tr>
<td>
<asp:ValidationSummary runat="server" ValidationGroup="MyMinValid" ShowMessageBox="True" ID="MySumMinValid" ForeColor="#990033" Font-Size="Medium" Font-NameMins="Times New Roman">
</asp:ValidationSummary>
</td>
</tr>
</table>
</td>
</tr>
</table>
</LayoutTemplate>
</asp:ListView>
Сейчас делаю сортировку по столбцам. Но возник такой вопрос: в шаблоне ItemTemplate, чтобы не отображать DropDownList, я отображаю эти значения в Label при помощи такого кода:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
protected void LVSpSotrud_ItemDataBound(object sender, ListViewItemEventArgs e)
{
Int32 mySysPodraz;
Int32 mySysDolgn;
string myNamePodraz="";
string myNameDolgn = "";
string myDateNach = "";
string myDateEnd = "";
DateTime kk;
InspPlatUslugiEntities myData = new InspPlatUslugiEntities();
if (e.Item.ItemType == ListViewItemType.DataItem)
{
Label lbSysPodrazd = (Label)e.Item.FindControl("lbSysPodrazd");
if (lbSysPodrazd != null)
{
mySysPodraz = Int32.Parse(lbSysPodrazd.Text.Trim());
ObjectQuery<DataCore.SpravPodraz> MyPodraz = myData.SpravPodraz.Where("it.Syskey = @SysKey",
new ObjectParameter("SysKey", mySysPodraz));
foreach (var PodrazCard in MyPodraz)
{
myNamePodraz = PodrazCard.NamePodr.Trim();
}
Label lbNamePodraz = (Label)e.Item.FindControl("lbNamePodraz");
lbNamePodraz.Text = myNamePodraz;
}
Label lblSysDolgn = (Label)e.Item.FindControl("lblSysDolgn");
if (lblSysDolgn != null)
{
mySysDolgn = Int32.Parse(lblSysDolgn.Text.Trim());
ObjectQuery<DataCore.SpravDolgnost> MyPodraz = myData.SpravDolgnost.Where("it.Syskey = @SysKey",
new ObjectParameter("SysKey", mySysDolgn));
foreach (var DolgnCard in MyPodraz)
{
myNameDolgn = DolgnCard.NameDolgn.Trim();
}
Label lbNameDolgn = (Label)e.Item.FindControl("lblNameDolgn");
lbNameDolgn.Text = myNameDolgn;
}
}
}
Если делать в ListView сортировку, то нужно, чтобы сортировка шла не по кодам, а по значениям этих кодов из справочника, ведь пользователь кодов никогда не увидит... Пойти на вброс этих значений в запрос в БД я не могу - источник данных перестанет быть редактируемым и надо будет делать ещё одну форму для ввода данных... Но так как пользователь работает только с этой таблицей, то делать нагромождение форм для одной таблицы смысла нет... Можно ли как-нибудь сделать такую хитрую сортировку?