none
在Listbox或是DropDownList下拉列表框中显示多列的方法 RRS feed

  • 问题

  • 我找了很久,在本论坛中搜索,好象也没有这方面的资料,请问在vs2008中用asp.net,如何在Listbox或是DropDownList下拉列表框中显示出多列呢?

    2009年5月31日 3:22

答案

  • 完整的例子
    Books.cs文件
    using System;
    using System.Collections.Generic;
    using System.Collections;
    using System.Linq;
    using System.Web;
    
    /// <summary>
    /// Summary description for Books
    /// </summary>
    public class Books
    {
      public Int32 Id {get;set;}
      public String Name { get; set; }
      public String QQ { get; set; }
    
      public Books() { }
    
      public List<Books> GetBooks
      {
        get
        {
          List<Books> b = new List<Books>();
          b.Add(new Books { Id = 1, Name = "aaaa", QQ = "AA" });
          b.Add(new Books { Id = 2, Name = "bbbb", QQ = "BB" });
          b.Add(new Books { Id = 3, Name = "cccc", QQ = "CC" });
    
          return b;
        }
      } 
    }
    

    aspx内容
    <%@ Page Language="C#" %>
    
    <%@ Register Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
      Namespace="System.Web.UI.WebControls" TagPrefix="asp" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
      <title></title>
    </head>
    <body>
      <form id="form1" runat="server">
      <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="LinqDataSource1"
        DataTextField="Uid" DataValueField="Uid">
      </asp:DropDownList>
      <asp:LinqDataSource ID="LinqDataSource1" runat="server" ContextTypeName="Books" TableName="GetBooks"
        Select='new(Id.toString() + "--" + Name + "--" + QQ as Uid)'>
      </asp:LinqDataSource>
      </form>
    </body>
    </html>
    


    【孟子E章】
    • 已标记为答案 dongtso 2009年5月31日 9:51
    2009年5月31日 9:44
    版主

全部回复

  • 1. 通过分隔符, 出来的结果如  Visual Studio - 开发工具
    2. 通过Div + GridView 或 ListView 来实现,点击控件时显示或隐藏这个 Div
    孟老师的网上有源码直接去下吧

    知识改变命运,奋斗成就人生!
    2009年5月31日 3:42
    版主
  • 可是,这个似乎有一点复杂,如果想要简单一点的,有不?看网上说有可以通过sql语句修改数据源也可以使下拉列表框出现多列的情形,可是就是没有见到示例,而且网上资料,因为图片显示不了,已看到源源了。
    一切,都在意料之中!
    2009年5月31日 3:56
  • 如有一个表有下面的字段:Id, Name, Type ; SQL 如下, SELECT (Name + ' - ' + Type) as DisplayText, Id From Table1 ,然后通过Id, 和DisplayText绑定 DropDownList 就行了





    知识改变命运,奋斗成就人生!
    2009年5月31日 3:59
    版主
  • 谢谢,你的回答,我实验一下,看看能否做到。

    但是对你说的:

    如有一个表有下面的字段:Id, Name, Type ; SQL 如下, SELECT (Name + ' - ' + Type) as DisplayText, Id From Table1 ,然后通过Id, 和DisplayText绑定 DropDownList 就行了

    这是指Id, Name, Type 三个字段还是两个啊?你的这个type是字段类型吗?

    我先去试一下,再回来。
    先说一声谢谢了!


    一切,都在意料之中!
    2009年5月31日 4:42
  • 都是字符串
    知识改变命运,奋斗成就人生!
    2009年5月31日 4:59
    版主
  • 试过了,不能使用啊,主要是通过Id, 和DisplayText绑定 DropDownList 就行了 ,这句话是什么意思,不能这样设置啊。
    一切,都在意料之中!
    2009年5月31日 5:24
  • 你好:X.X.Y
    我试过了,不行啊,我这个数据库中:

    Name,QQ为varchar类型,id为int型

    代码如下,总是不能通过:
     
    用户奖牌用户奖牌用户奖牌用户奖牌用户奖牌

    <asp:LinqDataSource ID="LinqDataSource2" runat="server"
            ContextTypeName="DAL.DataClassesDataContext" OrderBy="id"
            Select="select (Name+'-'+QQ ) as tsoBB,id form Book" TableName="Book">
        </asp:LinqDataSource>
        <asp:DropDownList ID="DropDownList1" runat="server"
            DataSourceID="LinqDataSource2" DataTextField="tsoBB" DataValueField="id">
        </asp:DropDownList>

    报错说:

    类型“Book”中不存在适用的方法“select”
    还请指教

    一切,都在意料之中!
    2009年5月31日 5:30
  • SQL 错了, 那个粗体的位置

    <asp:LinqDataSource ID="LinqDataSource2" runat="server" 
            ContextTypeName="DAL.DataClassesDataContext" OrderBy="id" 
            Select="select (Name+'-'+QQ ) as tsoBB,id form Book" TableName="Book">

    改为

    <asp:LinqDataSource ID="LinqDataSource2" runat="server" 
            ContextTypeName="DAL.DataClassesDataContext" OrderBy="id" 
            Select="select (Name+'-'+QQ ) as tsoBB,id from Book" TableName="Book">

    知识改变命运,奋斗成就人生!
    2009年5月31日 5:32
    版主
  • 对不起,仍然不能输出啊:

    <asp:LinqDataSource ID="LinqDataSource2" runat="server"
            ContextTypeName="DAL.DataClassesDataContext" OrderBy="id"
            Select="select (Name+'-'+QQ ) as tsoBB,id from Book" TableName="Book">
        </asp:LinqDataSource>
       
    <asp:DropDownList ID="DropDownList1" runat="server"
            DataSourceID="LinqDataSource2" DataTextField="tsoBB" DataValueField="id">
        </asp:DropDownList>

    报错说:

    类型“Book”中不存在适用的方法“select”

    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

    异常详细信息: System.Web.Query.Dynamic.ParseException: 类型“Book”中不存在适用的方法“select”

    可见这个select语句有问题,不能输出。


    一切,都在意料之中!
    2009年5月31日 5:47
  • 孟宪会MVP, 版主用户奖牌用户奖牌用户奖牌用户奖牌用户奖牌1 小时 5 分钟以前
    可参照
    模仿
    http://dotnet.aspx.cc/Exam/WebDropDownList.aspx



    谢谢楼主的这个方法,但是,我看了 ,这个有点复杂,我想要用sql语句赋值方法来点简点的就行了。

    我想试用一下:x.x.y的这种简易方法
    一切,都在意料之中!
    • 已编辑 dongtso 2009年5月31日 6:11 补充
    2009年5月31日 5:48
  • 办法至少有2个:
    1,动态添加DropDownList的item,这个非常简单,并且可控性很强
    2,sql语句本身就可以,

    都很简单

    【孟子E章】
    2009年5月31日 7:23
    版主
  • 孟宪会MVP, 版主用户奖牌用户奖牌用户奖牌用户奖牌用户奖牌1 小时 5 分钟以前
    可参照
    模仿
    http://dotnet.aspx.cc/Exam/WebDropDownList.aspx



    谢谢楼主的这个方法,但是,我看了 ,这个有点复杂,我想要用sql语句赋值方法来点简点的就行了。

    我想试用一下:x.x.y的这种简易方法
    一切,都在意料之中!
    这个方法其实很简单,就是绑定一个GridView
    【孟子E章】
    2009年5月31日 7:24
    版主
  • <%@ Page Language="C#" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script runat="server">
    
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
      <title></title>
    </head>
    <body>
      <form id="form1" runat="server">
      <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource1"
        DataTextField="UserId3" DataValueField="TrueName">
      </asp:DropDownList>
      <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="Data Source=.;Initial Catalog=jGroup2;Persist Security Info=True;User ID=sa;Password=密码"
        ProviderName="System.Data.SqlClient" SelectCommand="SELECT (Cast(UserId as nvarchar) + '-'+ [LoginName]) as [UserId3], [TrueName] FROM [U_User]">
      </asp:SqlDataSource>
      </form>
    </body>
    </html>
    

    【孟子E章】
    2009年5月31日 7:36
    版主
  •   <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="Data Source=.;Initial Catalog=jGroup2;Persist Security Info=True;User ID=sa;Password=密码"
        ProviderName="System.Data.SqlClient" SelectCommand="SELECT (Cast(UserId as nvarchar) + '    '+ [LoginName] + '    ' + [TrueName]) as [UserId3], [TrueName] FROM [U_User]">
      </asp:SqlDataSource>

    【孟子E章】
    2009年5月31日 7:38
    版主
  • <%@ Page Language="C#" %>
    
    
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    
    
    <script runat="server">
    
    
    
    </script>
    
    
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    
    <head runat="server">
    
      <title></title>
    
    </head>
    
    <body>
    
      <form id="form1" runat="server">
    
      <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource1"
    
        DataTextField="UserId3" DataValueField="TrueName">
    
      </asp:DropDownList>
    
      <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="Data Source=.;Initial Catalog=jGroup2;Persist Security Info=True;User ID=sa;Password=密码"
    
        ProviderName="System.Data.SqlClient" SelectCommand="SELECT (Cast(UserId as nvarchar) + '-'+ [LoginName]) as [UserId3], [TrueName] FROM [U_User]">
    
      </asp:SqlDataSource>
    
      </form>
    
    </body>
    
    </html>
    
    
    
    

    【孟子E章】

    谢谢孟版主,按照你的例中的sql语句,我还是不能通过,原因是:当数据源是LinqDataSource时:

    语句是这样的:

         <asp:LinqDataSource ID="LinqDataSource2" runat="server"
            ContextTypeName="DAL.DataClassesDataContext" OrderBy="id desc"
            Select="new((CAST(id as vachar(4))+'—'+Name+'—'+QQ)as tsoBB,id)" TableName="Book">
        </asp:LinqDataSource>
       
        <asp:DropDownList ID="DropDownList1" runat="server"
            DataSourceID="LinqDataSource2" DataTextField="tsoBB" DataValueField="id">
        </asp:DropDownList>

    但是运行时,总是提示有错误,将选择语句改成这样的: Select="new((Convert(vachar(4),id)+'—'+Name+'—'+QQ)as tsoBB,id)" TableName="Book"

    也还是这句有问题,盼指教,谢谢。

    其中:id 为int
              Name为varchar
              QQ也为varchar

    一切,都在意料之中!
    2009年5月31日 8:14
  • 请问,大家可以帮忙解答吗?

    为什么,当数据源是LinqDataSource时:
    这两种写法,都会报错呢?
    1、 Select="new((CAST(id as vachar(4))+'—'+Name+'—'+QQ)as tsoBB,id)" TableName="Book"
    2、Select="new((Convert(vachar(4),id)+'—'+Name+'—'+QQ)as tsoBB,id)" TableName="Book"


    整个代码语句是这样的:

         <asp:LinqDataSource ID="LinqDataSource2" runat="server"
            ContextTypeName="DAL.DataClassesDataContext" OrderBy="id desc"
            Select="new((CAST(id as vachar(4))+'—'+Name+'—'+QQ)as tsoBB,id)" TableName="Book">
        </asp:LinqDataSource>
       
        <asp:DropDownList ID="DropDownList1" runat="server"
            DataSourceID="LinqDataSource2" DataTextField="tsoBB" DataValueField="id">
        </asp:DropDownList>

    但是运行时,总是提示有错误,将选择语句改成这样的: Select="new((Convert(vachar(4),id)+'—'+Name+'—'+QQ)as tsoBB,id)" TableName="Book"

    也还是这句有问题,盼指教,谢谢。

    其中:id 为int
              Name为varchar
              QQ也为varchar

    一切,都在意料之中!
    2009年5月31日 9:16
  • 你的语法是错误,你需要使用Linq的语法啊

    Select ='new(id.toString() + " -- " + Name + "--" + QQ as Uid)'

    【孟子E章】
    2009年5月31日 9:43
    版主
  • 完整的例子
    Books.cs文件
    using System;
    using System.Collections.Generic;
    using System.Collections;
    using System.Linq;
    using System.Web;
    
    /// <summary>
    /// Summary description for Books
    /// </summary>
    public class Books
    {
      public Int32 Id {get;set;}
      public String Name { get; set; }
      public String QQ { get; set; }
    
      public Books() { }
    
      public List<Books> GetBooks
      {
        get
        {
          List<Books> b = new List<Books>();
          b.Add(new Books { Id = 1, Name = "aaaa", QQ = "AA" });
          b.Add(new Books { Id = 2, Name = "bbbb", QQ = "BB" });
          b.Add(new Books { Id = 3, Name = "cccc", QQ = "CC" });
    
          return b;
        }
      } 
    }
    

    aspx内容
    <%@ Page Language="C#" %>
    
    <%@ Register Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
      Namespace="System.Web.UI.WebControls" TagPrefix="asp" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
      <title></title>
    </head>
    <body>
      <form id="form1" runat="server">
      <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="LinqDataSource1"
        DataTextField="Uid" DataValueField="Uid">
      </asp:DropDownList>
      <asp:LinqDataSource ID="LinqDataSource1" runat="server" ContextTypeName="Books" TableName="GetBooks"
        Select='new(Id.toString() + "--" + Name + "--" + QQ as Uid)'>
      </asp:LinqDataSource>
      </form>
    </body>
    </html>
    


    【孟子E章】
    • 已标记为答案 dongtso 2009年5月31日 9:51
    2009年5月31日 9:44
    版主
  • 你的语法是错误,你需要使用Linq的语法啊

    Select ='new(id.toString() + " -- " + Name + "--" + QQ as Uid)'

    【孟子E章】

    真是太感谢,居然,在最后下班时间,版主把我救了。

    谢谢,但是找到许多网上资料,都是这样的Select="new((Convert(vachar(4),id)+'—'+Name+'—'+QQ)as tsoBB,id)" TableName="Book"或是Select="new((CAST(id as vachar(4))+'—'+Name+'—'+QQ)as tsoBB,id)" TableName="Book",
    不知版主的这种linq语法,在msdn哪个地方查的,太感谢了。
       

    一切,都在意料之中!
    2009年5月31日 9:50