【问题标题】:Show unselectable value in dropdownlist在下拉列表中显示不可选择的值
【发布时间】:2014-02-15 14:49:39
【问题描述】:

我在很多文件中有很多下拉列表。我正在尝试编写一个函数,以在每次页面加载时仅显示“---请选择--”作为默认项目 - 在回发时无法选择它,因此无法将其添加到数据库中,也不能作为列表添加到列表中新物品,。我不知道如何做到这一点。相反,我正在使用插入(我知道这是错误的),但我不知道这是实现这一目标的正确方法。请指教

ASPX

<asp:DropDownList ID="DropDownListVType" runat="server" DataSourceID="SqlDataSourceVesselType"
 DataTextField="Vessel_Type" DataValueField="VType_ID" Width="160px" AutoPostBack="False"
  CausesValidation="True" OnDataBound="ddl_DataBound">

CS ....

PublicFunctions pubvar = new PublicFunctions();

protected void ddl_DataBound(object sender, System.EventArgs e)
    {
           pubvar.ddl_DB(DropDownListVType);


    }

公共职能 CS

 public void ddl_DB(DropDownList d)
{
    try
    {
        d.Items.Insert(0, new ListItem("--- Please Select ---", String.Empty));
    }
    catch (Exception ex)
    {
        Console.WriteLine("{0} Exception caught.", ex);
    }

}

更新: 公共职能 CS

    public object checkNull (Control c)
    { 
    try{

       if (c.GetType()==typeof(TextBox))
       {
           TextBox tb = c as TextBox;

         if (!string.IsNullOrEmpty(tb.Text))
            {
                return tb.Text;
            }

        }

        if(c.GetType()==typeof(DropDownList))
        {
            DropDownList dl = c as DropDownList;

             if ((!string.IsNullOrEmpty(c.??
            {
                return c.???
            }

        }
    }

    catch (Exception ex)
    {
        Console.WriteLine("{0} Exception caught.", ex);
    }
    return (DBNull.Value);

在 PAGE CS 中调用

     command.Parameters.AddWithValue("@VType_ID", DropDownListVType.SelectedValue);

【问题讨论】:

  • 为什么插入方法不正确?你到底是哪里出了问题?
  • 每次页面回发时,---请选择---作为新项目添加到下拉列表中
  • 事先检查是否存在然后...
  • 请告诉我该怎么做?
  • 只有在 !Page.IsPostBack 时才添加

标签: c# asp.net drop-down-menu default-value


【解决方案1】:

好的...当您将默认选项插入索引 0 时,您可以执行以下操作:

if(!d.Items[0].Text.equals("--- Please Select ---"))
    d.Items.Insert("--- Please Select ---");

否则什么也不做。或如@Plue 所述:

if(!Page.IsPostBack)
    d.Items.Insert(0, new ListItem("--- Please Select ---", String.Empty));

此外,您可能应该将"--- Please Select ---" 移动到一个常量。

private const string DEFAULTOPTION = "--- Please Select ---";

【讨论】:

  • OP 的主要问题是使第一个元素不可选择
  • @plue 你确定吗??
  • 标题:在下拉列表中显示不可选择的值
  • @voguel 如果没有为该字段选择任何内容(这不是强制性的),则表单不会通过...我有一个 checkNull 函数,它确定是否未输入任何形式的任何内容(对于接受空值),然后将空值插入数据库。我如何使用它来使它工作?查看 checkNull 函数的更新代码以及我当前如何在 CS 页面中调用它
  • 您的 checknull 仅适用于 TextBox 类型的控件。您可以使用:c.Value 而不是 tb.Text。然后检查每个控件的值是否为空或为空。 value属性返回当前选中Item的ListItem.Value(如果c是DropDownList),如果使用Text,可能会得到ListItem.Text(没用)
【解决方案2】:

尝试将其添加到您的 aspx 中:

<asp:DropDownList ...  AppendDataBoundItems="true">
    <asp:ListItem Text="-Choose car-" disabled="true"/>
</asp:DropDownList>

这将默认显示-Choose car-。然后,当用户点击 ddl 时,该选项将无法选择。

并且不要在后面的代码中插入任何东西。

编辑

如果您与每个回发绑定,请尝试将其添加到您的 ddl_DB 代码中:

d.Items.Insert(0, new ListItem("--- Please Select ---", String.Empty));
d.Items[0].Attributes.Add("disabled", "disabled");

【讨论】:

  • 我在其他领域进行了验证。如果我在输入任何内容之前简单地单击保存,则经过验证的字段会出现相应的错误,但我在页面上的下拉列表中的值会自动默认为相应列表中的第一项,而不是显示--请选择-- 再次
  • 每次回发都绑定数据吗?
  • 是的。数据与每个回发绑定
  • 我不确定您的问题是什么。你是说我的方法适用于页面加载,但是当回发发生时,显示绑定列表的第一项而不是 --please select-- ?
  • 用你的代码,是不是--please select--插入了多次?
【解决方案3】:

如果您总是有一个“---请选择---”选项或类似的默认值。您总是可以忽略每个下拉列表中的第一个 ListItem。

myDropDown_OnSelectedIndexChanged(...){

    if(myDropDown.SelectedIndex != 0){

    //Do stuff, make database changes, etc

    }

}

如果目标是永远不允许选择此控件,请输入以下内容:

try
{
    if(!IsPostBack){
        ListItem defaultOption = new ListItem("---Please Select---", String.Empty);
        d.Items.Insert(0, defaultOption);
        defaultOption.Attributes.Add( "disabled", "disabled" );
    }
}
catch (Exception ex)
{
    Console.WriteLine("{0} Exception caught.", ex);
}

【讨论】:

  • --请选择-- 不能存储在数据库中的任何索引处。这是假设?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-12
  • 1970-01-01
  • 2015-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多