【发布时间】:2013-08-22 09:33:12
【问题描述】:
我想我在使用列表框时发现了一个错误。 示例:带有 Editbutton 的 ListBox 将其加载到特殊字段中:
列表框有 4 个项目:
- 电话号码:+15454545(值 2)(索引 0)
- 电子邮件:Test@testmail.com(值 1)(索引 1)
- 传真号码:+1515515151(值 3)(索引 2)
- 电子邮件:Test2@testmail.com(值 1)(索引 3)
然后是editbuttoncode:
protected void EditKOFC(object sender, EventArgs e)
{
try
{
if (ListBoxKOFC.SelectedItem == null)
{
LabelMPE.Text = "Please select first!";
ModalPopupExtender1.Show();
}
else
{
string value = ListBoxKOFC.SelectedValue;
Session["EditID"] = ListBoxKOFC.SelectedIndex;
string[] meineStrings = ListBoxKOFC.SelectedItem.Text.Split(new Char[] { ':' });
string text = meineStrings[1];
string text2 = text.Substring(1);
TextBoxKOFC.Text = text2;
foreach (ListItem item in DropDownListKOFC.Items)
{
item.Selected = false;
if (item.Value == value)
{
item.Selected = true;
}
}
editing = true;
AddKOFC.Text = "Save";
}
}
catch (Exception ex)
{
GlobalFunctions.Error_Log(ex, ex.TargetSite.ToString());
}
}
我得到了问题。 当我选择前三个项目时,一切都很好。当我选择第 4 项时,它会使用第二项中的所有数据,即使它们具有不同的索引!
值是否影响此处的索引,如果是,为什么?! 这对我来说确实是个问题,因为我需要将联系人类型存储在值中。 (1 = 电子邮件,2 = 电话等);
谢谢!
编辑: 澄清一下:Edit-Button 是 ListBox 之外的一个 Button。
<asp:TableRow>
<asp:TableCell>
<asp:UpdatePanel runat="server" UpdateMode="Conditional" ID="UpdatePanel2">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="AddKOFC" EventName="Click" />
</Triggers>
<ContentTemplate>
<asp:DropDownList runat="server" ID="DropDownListKOFC" />
</ContentTemplate>
</asp:UpdatePanel>
</asp:TableCell>
<asp:TableCell>
<asp:UpdatePanel runat="server" UpdateMode="Conditional" ID="UpdatePanel1">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="AddKOFC" EventName="Click" />
</Triggers>
<ContentTemplate>
<asp:TextBox runat="server" ID="TextBoxKOFC" />
</ContentTemplate>
</asp:UpdatePanel>
</asp:TableCell><asp:TableCell>
<asp:UpdatePanel runat="server" UpdateMode="Conditional" ID="UP2">
<ContentTemplate>
<asp:Button runat="server" ID="AddKOFC" OnClick="AddContactInformation" Text="Add Contactinformation" />
<asp:HiddenField ID="HFAdd" runat="server" />
<ajaxToolkit:ModalPopupExtender ID="ModalPopupExtender1" runat="server" BackgroundCssClass="modalBackground"
TargetControlID="HFAdd" PopupControlID="PanelChoose" BehaviorID="MPEchoose">
</ajaxToolkit:ModalPopupExtender>
<asp:Panel ID="PanelChoose" runat="server" BorderStyle="Solid" BackColor="ButtonShadow">
<asp:Label ID="LabelMPE" runat="server"></asp:Label>
<asp:Table ID="Table3" runat="server">
<asp:TableRow>
<asp:TableCell>
<asp:Button ID="ButtonOK" runat="server" Text="Ok" />
</asp:TableCell>
</asp:TableRow>
</asp:Table>
</asp:Panel>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="AddKOFC" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="ButtonOK" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
</asp:TableCell></asp:TableRow>
<asp:TableRow>
<asp:TableCell>
<asp:Label ID="Label13" runat="server"></asp:Label>
</asp:TableCell></asp:TableRow>
<asp:TableRow>
<asp:TableCell>
<asp:UpdatePanel runat="server" UpdateMode="Conditional" ID="UP3">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="AddKOFC" EventName="Click" />
</Triggers>
<ContentTemplate>
<asp:ListBox runat="server" ID="ListBoxKOFC" ToolTip="The way to contact this person">
</asp:ListBox>
</ContentTemplate>
</asp:UpdatePanel>
</asp:TableCell><asp:TableCell>
<asp:Button ID="ButtonUpdate" runat="server" Text="Edit" OnClick="EditKOFC" />
</asp:TableCell><asp:TableCell>
<asp:Button ID="ButtonDelete" runat="server" Text="Delete" OnClick="DeleteKOFC" />
</asp:TableCell></asp:TableRow>
<asp:TableRow>
Edit2 以获得更多说明(或其他):
这就是它的外观。 然后我想编辑第 4 项:
当我调试时:
第4项没有被选中……即使你在之前的图片中看到,也是!!
如果我查看 ListBoxKOFC 本身:
当代码完成后,错误的项目被选中并加载到编辑:
但正如您在 4. Screenshot 中看到的那样 -> 我要编辑的项目的索引是 3。 只有值是相同的。 但是为什么值不能相同,索引总是另一个...
该值是否在此处用作索引?! (不可能,但 atm 我不确定了......)还是价值只是被窃听了?
【问题讨论】:
-
ListBox with Editbutton?? -
Ups,EditButton 本身就是 ListItem 之外的一个 Button。我会更新问题。
-
@DatRid: 好的,但只有我一个人不明白这个问题吗?你想达到什么目的?
ListBox.SelectedValue返回 first 选定项的值。因此,如果全部选中,它总是返回第一项的值。另一方面,DropDownList只有单选。因此,如果它包含相同的项目,也会选择第一个项目。我也不明白 LiustBox-Items 中的索引和值的含义。 -
@Tim Schmelter:嗯,我总是只选择一项,而不是更多!
-
@TimSchmelter:我刚刚写下了列表框是如何填充的。