Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查找是否动态添加了下拉列表值_C#_Asp.net_Viewstate - Fatal编程技术网

C# 查找是否动态添加了下拉列表值

C# 查找是否动态添加了下拉列表值,c#,asp.net,viewstate,C#,Asp.net,Viewstate,是否有方法确定(回发后)dropdownlist中的值是动态添加的还是初始值之一 例如 1. 2. 3. //回邮1 私有无效AddExtraItemToList() { if(someCondition)//可以插入也可以不插入额外的项 MyDDL.项目添加(“17”); } //回邮2 private void RemoveExtraItemsFromList() { //是否从列表中删除任何非默认值? } 在代码隐藏或其他方式中编码默认值列表显然很简单,但如果您可以通过查询哪些值是初始

是否有方法确定(回发后)dropdownlist中的值是动态添加的还是初始值之一

例如


1.
2.
3.
//回邮1
私有无效AddExtraItemToList()
{
if(someCondition)//可以插入也可以不插入额外的项
MyDDL.项目添加(“17”);
}
//回邮2
private void RemoveExtraItemsFromList()
{
//是否从列表中删除任何非默认值?
}
在代码隐藏或其他方式中编码默认值列表显然很简单,但如果您可以通过查询哪些值是初始属性,哪些值是从viewstate还原生成的,这将是一件好事。

Hai,

看看这个


您可以根据列表项是原始项还是额外项,为它们指定相同的值

<asp:DropDownList ID="MyDDL" runat="server">
    <asp:ListItem Value="A">1</asp:ListItem>
    <asp:ListItem Value="A">2</asp:ListItem>
    <asp:ListItem Value="A">3</asp:ListItem>
</asp:DropDownList>

private void AddExtraItemToList() {
    if (someCondition) // extra items may or may not be inserted
        MyDDL.Items.Add(new ListItem("17", "B");
}

private void RemoveExtraItemsFromList() {
    for (int x = MyDDL.Items.Count - 1; x > 0; --x) {
        if MyDDL.Items[x].Value = "B" {
            MyDDL.Items.RemoveAt(x);
        }
    }
}

1.
2.
3.
私有无效AddExtraItemToList(){
if(someCondition)//可以插入也可以不插入额外的项
添加(新列表项(“17”、“B”);
}
private void RemoveExtraItemsFromList(){
对于(int x=MyDDL.Items.Count-1;x>0;--x){
如果MyDDL.Items[x].Value=“B”{
MyDDL.Items.RemoveAt(x);
}
}
}

抱歉,如果出现C#语法错误-我有点生疏,正在从VB进行翻译。

处理此问题的最佳方法是从一开始就跟踪代码中的原始值

下面是一个经过修改的代码版本,它通过在viewstate中存储原始文件来实现这一点(您可以将它们存储在任何位置)。诀窍是,在对新项目进行任何动态插入之前,您必须先从下拉列表中取出项目

        public string[] OriginalDropDownValues
        {
            get
            {
                return ViewState["origValues"] as string[];
            }
            set
            {
                ViewState.Add("origValues", value);
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                // get the values from the control and store them in viewstate
                var oValues = new List<string>();
                foreach (ListItem item in MyDDL.Items)
                {
                    oValues.Add(item.Value);
                }
                OriginalDropDownValues = oValues.ToArray();
            }
        }

        // on postback 2
        private void RemoveExtraItemsFromList()
        {
            List<string> valuesToKill = new List<string>();
            var oItems = OriginalDropDownValues;
            foreach (ListItem currentItem in MyDDL.Items)
            {
                if (!oItems.Contains(currentItem.Value))
                {
                    // can't remove items yet, would modify collection we are iterating through
                    valuesToKill.Add(currentItem.Value);

                }
            }
            foreach (var killVal in valuesToKill)//loop kill values and locate+remove each from drop down.
            {
                MyDDL.Items.Remove(MyDDL.Items.FindByValue(killVal));
            }
        }
public string[]OriginalDropDownValues
{
得到
{
将ViewState[“OrigValue”]返回为字符串[];
}
设置
{
添加(“origValue”,value);
}
}
受保护的无效页面加载(对象发送方、事件参数e)
{
如果(!Page.IsPostBack)
{
//从控件获取值并将其存储在viewstate中
var oValues=新列表();
foreach(MyDDL.Items中的ListItem项)
{
oValues.Add(项目价值);
}
OriginalDropDownValues=oValues.ToArray();
}
}
//回邮2
private void RemoveExtraItemsFromList()
{
列表值stokill=新列表();
var oItems=原始下降值;
foreach(MyDDL.Items中的ListItem currentItem)
{
如果(!oItems.Contains(currentItem.Value))
{
//尚无法删除项,将修改我们正在迭代的集合
valuesToKill.Add(currentItem.Value);
}
}
foreach(valuesToKill中的var killVal)//循环kill值并从下拉列表中查找并删除每个值。
{
MyDDL.Items.Remove(MyDDL.Items.FindByValue(killVal));
}
}

已尝试MyDDL.Items.Clear();然后添加默认值Pandiya,该值不回答问题..Clear将删除所有项目。该问题不会处理相同的问题-要保留的问题是已知的(即第一个)。在这种情况下,需要有其他方法来确定哪些项目需要保留,哪些项目需要删除。不确定是否有简单的非黑客解决方案。显然,如果您需要使用该值,则此解决方案将根本不起作用。
        public string[] OriginalDropDownValues
        {
            get
            {
                return ViewState["origValues"] as string[];
            }
            set
            {
                ViewState.Add("origValues", value);
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                // get the values from the control and store them in viewstate
                var oValues = new List<string>();
                foreach (ListItem item in MyDDL.Items)
                {
                    oValues.Add(item.Value);
                }
                OriginalDropDownValues = oValues.ToArray();
            }
        }

        // on postback 2
        private void RemoveExtraItemsFromList()
        {
            List<string> valuesToKill = new List<string>();
            var oItems = OriginalDropDownValues;
            foreach (ListItem currentItem in MyDDL.Items)
            {
                if (!oItems.Contains(currentItem.Value))
                {
                    // can't remove items yet, would modify collection we are iterating through
                    valuesToKill.Add(currentItem.Value);

                }
            }
            foreach (var killVal in valuesToKill)//loop kill values and locate+remove each from drop down.
            {
                MyDDL.Items.Remove(MyDDL.Items.FindByValue(killVal));
            }
        }