ASP.NET的多个列下拉菜单

分享于 

8分钟阅读

Web开发

  繁體

介绍

有很多下拉列表控件,但是我没有看到任何下拉控件,可以显示 MS Access 或者,所以我想构建自己的控件,以显示基于SQL语句。e.g. 和语句所选择的控件。" 从数据库中选择 col1,col2,col3 ",但我建议选择两个或者三个列,最多。

控件的生成方式

这不仅仅是一个控件,而是一个复合控件,意味着它使用不止一个控件构建,导致一个超级控制。 图 below 演示了控件是如何工作的。 使用的控件是 TextBoxLabelDataGridPanel 控件,其中包含所有控件。 由于 INamingContainer 接口( 维护控件的唯一名称)的实现,我还将 TextBoxDataGridID 属性设置为" txt"和" DDL",因为如果我没有设置ID值,控件将生成":ctl1"。

使用代码

使用代码非常简单,我已经在 VB.Net 中显示了这个示例,但是你可以在 C# 中使用它。 下载该控件的DLL文件,并通过从解压文件的位置选择DLL将控件添加到工具箱。 在aspx页中删除控件后,可以通过属性窗口或者从HTML页设置属性。

控件的属性

这个控件有许多属性,它们是自我解释的,但有一些属性需要解释,比如:

  • GridRowColor - 当鼠标在网格上移动时,设置网格的行颜色,默认情况下颜色为 LightGray。
  • GridTextColor - 设置网格上移动鼠标时网格中文本的颜色,默认情况下,颜色为红色。
  • ViewColID - 这是这个控件的一个很酷的特性。 想象一下" 选择 "( 或者任何其他填充网格的方法) 有两个或者多个列,你需要在文本显示中显示 2 nd 3rd 或者 4th 列。 设置这里属性值以显示所需的列,默认为 0,表示将显示第一列。 如果需要显示 3rd 列,请将这里属性值设置为 2. 如果将这里值设置为列的计数,将显示一个错误,如下图所示:

    根据为这里属性选择的值,在将鼠标移动到网格上时,文本中的值会更改。

  • CssClass - 复制这里样式并将它的粘贴到aspx页 below 中 头部 部分:
    <stylelang="text/css"media="screen">. general { FONT-SIZE: 8pt; 
     COLOR: navy;FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif } </style>.
  • Height - 不在"属性"窗口或者"HTML"页中设置 Height 属性,请在代码 behind 页中设置这里属性。 I.e.:
    MultiColDD_List1.Height = Unit.Pixel(200)
  • ToolTip - 工具提示值可以更改为任何文本。

还有一个方法,这个控件有一个方法," retTotRows",你必须使用这个方法,否则控件可能无法正常工作。 实际上,这里方法返回要在下拉 List 中填充的行的计数,并生成单击事件。

要使用这里方法:

MultiColDD_List1.retTotRows(DS_P.Tables(0).Rows.Count)

或者,如果要从其他方法生成项,请确保将总行传递给该方法。

PrivateSub Page_Load(ByVal sender As System.Object,
 ByVal e As System.EventArgs) HandlesMyBase.Load
 IfNot IsPostBack Then MultiColDD_List1.Width = Unit.Pixel(300)
 MultiColDD_List1.Height = Unit.Pixel(200) ' make sure you set'the height property, else there will be no scroll bar. MultiColDD_List1.DataSource = CreateDataSources()
 ' this function returns the dataset to bind to the control MultiColDD_List1.DataBind()
 EndIfEndSubFunction CreateDataSources() As DataSet
 TryDim DS_P As DataSet
 Dim cn As SqlConnection
 Dim cmdP As SqlDataAdapter
 Dim sqlStr AsString =
 "select au_Lname,Phone from authors"' you could add more cols'Change the SQL Server name {Data Source = <your server name>} cn = New SqlConnection("Integrated Security=SSPI;Persist Security
 Info=False;Initial Catalog=Pubs;Data Source=NJ5Mail")
 cmdP = New SqlDataAdapter(sqlStr, cn)
 DS_P = New DataSet
 cmdP.Fill(DS_P, "Policies")
 MultiColDD_List1.retTotRows(DS_P.Tables(0).Rows.Count)
 ' make sure you use this methodReturn DS_P
 DS_P.Dispose()
 cmdP.Dispose()
 cn.Close()
 Catch ex As Exception
 EndTryEndFunction

检索控制值

一旦你选择了该项,可以使用JavaScript将它的发送到另一个页面或者直接在代码 behind 中发送。 假设我们有一个HTML按钮。 在这个按钮的onClick 事件中,下拉列表的值可以发送到另一个页面,代码 below 演示了这一点:

<script language="javascript">function Show(){
 window.open("anotherPage.aspx?ddValue=" + 
 document.getElementById('MultiColDD_List1_txt').value);
}
</script>
<input id="Shows" onclick="Show();" type="button" value="HTML BUTTON">

确保控件的NAME 以"_txt"结束。 要在同一页中使用它,请直接调用控件的值,如下所示: MultiColDD_List1.Text

使用智能感知

当将控件用于aspx页时,将无法看到控件的属性,这使得你难以找到控件的属性,从而查找控件。 那么,如何使智能感知工作? 首先,你必须为此控件生成模式文件 换句话说,". xsd",ZIP文件包含该控件的. xsd。 将这里. xsd 文件复制到以下文件夹:

  • C:Program FilesMicrosoft Visual Studio. NET 2003 Common7Packagesschemasxml

而在 正文 标记的标记,添加下面的代码:

<bodyxmlns:ksj1="urn:http://schemas.ksjControls.com/ASPNET"MS_POSITIONING="GridLayout">

图 below 显示了智能感知:

Points of Interest

这里控件实现 INamingContainer 接口。 在 ASP.NET 页面的HTML输出中,控件的客户端名称与你在服务器代码中给它们的名称不总是匹配。 这是因为 ASP.NET 自动重命名它们以保持组织,并确保没有两个控件具有相同的客户端,。 通过实现 INamingContainer 接口,自定义控件被标识为子控件的容器。 它还确保输出中的所有子控件都以类似的方式命名。 这对于引用客户端代码中的控件很重要。 这就是为什么单击,按钮,控件的值从 MultiColDD_List1_txt.value 获取,而不是从,。换句话说,。MultiColDD_List1 中提供的ID。 因为这是一个复合控件,而不是使用 Render 方法,所以我重写了 CreateChildControls 方法,所有的技巧都在这里。 这个控件的另一个特性是当你将鼠标移到网格上时,你可以看到文本框中的文本更改。

请欣赏。


COL  asp  asp-net  column  多列