在下拉列表中显示多个字段的两种方法

首先,我们需要从数据库中取到我们的数据

Class1:

 1  string sqlcon = "Data Source=.;Initial Catalog=Test;User ID=sa;Password=******";
 2
 3         public List<ModelClass> FindAll()
 4         {
 5             try
 6             {
 7                 List<ModelClass> modList = new List<ModelClass>();
 8                 using (SqlConnection con = new SqlConnection(sqlcon))
 9                 {
10                     con.Open();
11                     string sql = "select ID,Name,Address from TEST1";
12                     SqlCommand com = new SqlCommand();
13                     com.CommandText = sql;
14                     com.CommandType = CommandType.Text;
15                     com.Connection = con;
16                     using (SqlDataReader read = com.ExecuteReader())
17                     {
18                         while (read.Read())
19                         {
20                             modList.Add(new ModelClass() { ID = Convert.ToInt32(read["ID"].ToString()), Name = read["Name"].ToString(), Address = read["Address"].ToString() });
21                         }
22                     }
23                     return modList;
24                 }
25             }
26             catch (Exception)
27             {
28                 throw;
29             }
30         }
31
32         public System.Data.DataSet FindAllToDS()
33         {
34             try
35             {
36                 using (SqlConnection con = new SqlConnection(sqlcon))
37                 {
38                     con.Open();
39                     System.Data.DataSet ds = new DataSet();
40                     string sql = "select ID,Name,Address from TEST1";
41                     SqlDataAdapter sda = new SqlDataAdapter();
42                     sda.SelectCommand = new SqlCommand(sql,con);
43                     sda.Fill(ds);
44                     return ds;
45                 }
46             }
47             catch (Exception)
48             {
49
50                 throw;
51             }
52         }

我分别用list和DataSet两种方式取得了数据,首先我们需要构造一个实现这样方法的类

gzClass:

1 public class gzClass
2     {
3         public int ID { get; set; }
4         public string NameAndAddress { get; set; }
5     }

第一种实现方法:在后台试用构造类去绑定数据

 1  protected void Page_Load(object sender, EventArgs e)
 2         {
 3             if (!IsPostBack)
 4             {
 5                 //元数据
 6                 List<ModelClass> modelList = new List<ModelClass>();
 7                 System.Data.DataTable dt = new System.Data.DataTable();
 8                 //赋值护具
 9                 List<gzClass> strListToList = new List<gzClass>();
10                 List<gzClass> dtList = new List<gzClass>();
11                 //测试连接数据库类
12                 Class1 c1 = new Class1();
13                 //赋值
14                 modelList = c1.FindAll();
15                 dt = c1.FindAllToDS().Tables[0];
16                 //遍历取值并给与另一个构造类
17                 foreach (ModelClass item in modelList)
18                 {
19                     strListToList.Add(new gzClass() { ID = item.ID, NameAndAddress = item.Name + "(" + item.Address + ")" });
20                 }
21
22
23                 if (dt != null && dt.Rows.Count > 0)
24                 {
25                     foreach (System.Data.DataRow dsItem in dt.Rows)
26                     {
27                         dtList.Add(new gzClass() { ID = Convert.ToInt32(dsItem["ID"]), NameAndAddress = dsItem["Name"] + "(" + dsItem["Address"] + ")" });
28                     }
29                 }
30
31
32
33                 this.ddl_list.DataSource = strListToList;
34                 this.ddl_list.DataTextField = "NameAndAddress";
35                 this.ddl_list.DataValueField = "ID";
36                 this.ddl_list.DataBind();
37
38                 this.ddl_ds.DataSource = dtList;
39                 this.ddl_ds.DataTextField = "NameAndAddress";
40                 this.ddl_ds.DataValueField = "ID";
41                 this.ddl_ds.DataBind();
42
43             }
44         }

第二种方法:使用ajax异步加载,进行拼接,这时就要借助我们的一般处理程序了

 1  public void ProcessRequest(HttpContext context)
 2         {
 3             context.Response.ContentType = "text/plain";
 4
 5             //元数据
 6             List<ModelClass> modelList = new List<ModelClass>();
 7             System.Data.DataTable dt = new System.Data.DataTable();
 8             StringBuilder sbu1 = new StringBuilder();
 9             //测试连接数据库类
10             Class1 c1 = new Class1();
11             //赋值
12             modelList = c1.FindAll();
13             dt = c1.FindAllToDS().Tables[0];
14
15             //拼接数据
16             sbu1.AppendLine("<select name=\"ddl_list\" id=\"ddl_list\">");
17             foreach (ModelClass modelItem in modelList)
18             {
19                 sbu1.AppendLine("<option value=\""+modelItem.ID+"\">"+modelItem.Name+"("+modelItem.Address+")</option>");
20             }
21             sbu1.AppendLine("</select>");
22
23
24             sbu1.AppendLine(" <select name=\"ddl_datarow\" id=\"ddl_datarow\">");
25             foreach (System.Data.DataRow drItem in dt.Rows)
26             {
27                 sbu1.AppendLine("<option value=\""+drItem["ID"].ToString()+"\">"+drItem["Name"]+"("+drItem["Address"]+")</option>");
28             }
29             sbu1.AppendLine("</select>");
30             context.Response.Write(sbu1.ToString());
31             context.Response.End();
32         }

把数据返回并在页面中给值,下面是我的aspx页面

 1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebTest1.WebForm1" %>
 2
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 4
 5 <html xmlns="http://www.w3.org/1999/xhtml">
 6 <head runat="server">
 7     <title></title>
 8 <script src="jquery-2.1.1.min.js" type="text/javascript"></script>
 9 </head>
10 <body>
11     <form id="form1" runat="server">
12     <div>
13         <asp:DropDownList ID="ddl_list" runat="server">
14         </asp:DropDownList>
15         <asp:DropDownList ID="ddl_ds" runat="server">
16         </asp:DropDownList>
17         <div id="ddlDisplay"></div>
18     </div>
19     </form>
20 </body>
21 </html>
22 <script type="text/javascript">
23     window.onload = function () {
24         $.ajax({
25             url: "ddlTest1.ashx",
26             type: "post",
27             async: false,
28             success: function (data) {
29                 if (data != "") {
30                     $("#ddlDisplay").html(data);
31                 }
32             }
33         });
34
35     }
36 </script>

本人想了半天只想出了这两种方法,欢迎补充,多多学习。

时间: 2024-10-26 17:25:52

在下拉列表中显示多个字段的两种方法的相关文章

QT中获取选中的radioButton的两种方法(动态取得控件的objectName之后,对名字进行比较)

QT中获取选中的radioButton的两种方法 QT中要获取radioButton组中被选中的那个按钮,可以采用两种如下两种办法进行: 方法一:采用对象名称进行获取 代码: 1 QRadioButton* pbtn = qobject_cast<QRadioButton*>(ui->BG->checkedButton()); 2 QString name = pbtn->objectName(); 3 if(!QString::compare(name, "rad

在Java Web程序中使用监听器可以通过以下两种方法

之前学习了很多涉及servlet的内容,本小结我们说一下监听器,说起监听器,编过桌面程序和手机App的都不陌生,常见的套路都是拖一个控件,然后给它绑定一个监听器,即可以对该对象的事件进行监听以便发生响应,从本质上来说这些都是观察者模式的具体实现,在web程序中的监听器也不例外.在Java Web程序中使用监听器可以通过以下两种方法:通过注解@WebListener来标识一个自定义的监听器:[java] view plain copy@WebListener public class Custom

SpringMVC中controller返回json数据的两种方法

SpringMVC中controller返回json数据的两种方法 1.jsp的ajax请求: function getJson(){ $.ajax({ type:"get", dataType:"json", url:"<%=basePath %>getJson", success:function(data){ for(var i=0;i<jsonData.length;i++){ alert("Id:"

PHP中对用户身份认证实现两种方法

用户在设计和维护站点的时候,经常需要限制对某些重要文件或信息的访问.通常,我们可以采用内置于WEB服务器的基于HTTP协议的用户身份验证机制. 当访问者浏览受保护页面时,客户端浏览器会弹出对话窗口要求用户输入用户名和密码,对用户的身份进行验证,以决定用户是否有权访问页面.下面用两种方法来说明其实现原理.  一.用HTTP标头来实现  标头是服务器以HTTP协议传送HTML信息到浏览器前所送出的字串.HTTP采用一种挑战/响应模式对试图进入受密码保护区域的用户进行身份验证.具体来说,当用户首次向W

QT中获取选中的radioButton的两种方法

QT中要获取radioButton组中被选中的那个按钮,可以采用两种如下两种办法进行: 方法一:采用对象名称进行获取 代码: 1 QRadioButton* pbtn = qobject_cast<QRadioButton*>(ui->BG->checkedButton()); 2 QString name = pbtn->objectName(); 3 if(!QString::compare(name, "radioButton")) 4 { 5 QM

转载:在ASP.net 3.5中 用JSON序列化对象(两种方法)

asp.net3.5中已经集成了序列化对象为json的方法. 1:System.Runtime.Serialization.Json;    2:System.Web.Script.Serialization两个命名空间下的不同方法进行序列化和反序列化. 第一种方法:System.Runtime.Serialization.Json public class JsonHelper    {        /// <summary>        /// 生成Json格式        /// 

elphi 怎么给字符串里加回车换行,label显示多行文本的两种方法

#13 如:'设置好时间后,根据'+#13+'时间选择右边的帐套'就可以了. 注意不要用#10#13或#13#10, 那是在文本文件中的用法. #13的另一种用法是用^M, 注意同样也不要用引号. 第一种方法:在窗体的onCreate事件里写入以下代码: label2.Caption:=’Delphi作为一种面向对象的可视化'#10’开发工具,以其开发程序的高速度'#10’和编译代码的高效率越来越受到'#10’广大编程人员的喜爱.'  //#10为换行符号 第二种方法: 修改label的两个属性

thinkphp获取特定字段的两种方法

thinkphp getField( )和field( ) 2014年10月05日 ⁄ 综合 ⁄ 共 1509字 ⁄ 字号 小 中 大 ⁄ 评论关闭 做数据库查询的时候,比较经常用到这两个,总是查手册,记不住,现在把它总结下,希望以后用的时候不查手册了. 不管是用select 查询数据集,还是用find 查询数据,常配合连贯操作where.field.order等一起使用.  field():用于定义要查询的字段(支持字段排除) 用法:field($field , $except=false)

java中判断字符串是否相等有两种方法:

1.用“==”运算符,该运算符表示指向字符串的引用是否相同,比如: String a="abc";String b="abc",那么a==b将返回true.这是因为在java中字符串的值是不可改变的,相同的字符串在内存中只会存一份,所以a和b指向的是同一个对象:再比如:String a=new String("abc");String b=new String("abc");那么a==b将返回false,因为a和b指向不同的对