以下是我写的一个DropDownList可以帮定多个列的一个用户控件
<TABLE id="Table6" cellSpacing="0" cellPadding="0" border="0">
<TBODY>
<TR>
<TD style="DISPLAY: none" width="1"><asp:textbox id="tbValue" runat="server" Width="10px">0</asp:textbox></TD>
<TD id="TD1" width="400" runat="server"><asp:textbox id="tbDes" runat="server" Width="100%" ReadOnly="True"
CssClass="noRightBorder"></asp:textbox></TD>
<TD>
<DIV style="BORDER-RIGHT: thin inset; BORDER-TOP: thin inset; WIDTH: 18px; POSITION: relative; HEIGHT: 18px"
ms_positioning="GridLayout">
<DIV onmouseup="this.className='link_arrow0'" class='link_arrow0' onselectstart="return false" onmousedown="this.className='link_arrow1'" style="POSITION: relative" onclick="show('<%=DG.ClientID%>','<%=DataGrid1.ClientID%>','<%=tbValue.ClientID%>');">6</DIV>
</DIV>
</TD>
</TR>
<TR>
<TD style="DISPLAY: none" width="1"></TD>
<TD id="TD2" width="400" runat="server">
<DIV id="DG" onblur="hide();" style="BORDER-RIGHT: gray 1px solid; BORDER-TOP: gray 1px solid; DISPLAY: none; Z-INDEX: 200; OVERFLOW: auto; WIDTH: 100%; BORDER-BOTTOM: gray 1px solid; POSITION: absolute; HEIGHT: 175px"
onmouseout="lostFocus();" runat="server" ms_positioning="GridLayout"><iframe
style="FILTER: progid: DXImageTransform.Microsoft.Alpha(style=0,opacity=100); VISIBILITY: inherit"
frameBorder=0 width="<%=DataGrid1.width%>" height="<%=DataGrid1.height%>"
> </iframe>
<asp:datagrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 0px; POSITION: absolute; TOP: 0px" runat="server"
Width="750px" Height="200px" ShowHeader="False" BorderWidth="1px"
BorderColor="Gainsboro"></asp:datagrid></DIV>
</TD>
<td></td>
</TR>
</TBODY>
</TABLE>

<script language="javascript">
initWidth('<%=DataGrid1.ClientID%>','<%=tbDes.ClientID%>','<%=tbValue.ClientID%>');</script>
Imports System.Data.SqlClient

Public Class DrpDataGridClass DrpDataGrid
Inherits System.Web.UI.UserControl


Web Form Designer Generated Code#Region " Web Form Designer Generated Code "

'This call is required by the Web Form Designer.

<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()Sub InitializeComponent()

End Sub

Protected WithEvents tbValue As System.Web.UI.WebControls.TextBox
Protected WithEvents tbDes As System.Web.UI.WebControls.TextBox
Protected WithEvents DataGrid1 As System.Web.UI.WebControls.DataGrid
Protected WithEvents TD1 As System.Web.UI.HtmlControls.HtmlTableCell
Protected WithEvents TD2 As System.Web.UI.HtmlControls.HtmlTableCell
Protected WithEvents DG As System.Web.UI.HtmlControls.HtmlGenericControl

'NOTE: The following placeholder declaration is required by the Web Form Designer.
'Do not delete or move it.
Private designerPlaceholderDeclaration As System.Object


Private Sub Page_Init()Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: This method call is required by the Web Form Designer
'Do not modify it using the code editor.
InitializeComponent()
End Sub

#End Region
Private tbWidth As Integer

Private Sub Page_Load()Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim Str As String
If Not Page.IsStartupScriptRegistered("Key1") Then
Str = "<script language =javascript >" + vbCrLf
Str += "var gbID;" + vbCrLf
Str += "var inLayer=false;" + vbCrLf
Str += "function show(DGID,GridID,VID) {" + vbCrLf
Str += "var tab=document.all(GridID);" + vbCrLf
Str += "var val=document.all(VID).value;" + vbCrLf
Str += "document.all(DGID).style.display='block';" + vbCrLf
Str += "document.all(DGID).focus();" + vbCrLf
Str += "gbID=DGID;" + vbCrLf
Str += "if (tab!=null){" + vbCrLf
Str += "for(var i=0;i<tab.rows.length;i++) {" + vbCrLf
'Str += "var k=i/2+'';" + vbCrLf
'Str += "if (k.indexOf('.')!=-1)" + vbCrLf
'Str += "tab.rows(i).style.backgroundColor='OldLace';" + vbCrLf
'Str += "else" + vbCrLf
'Str += "tab.rows(i).style.backgroundColor='';" + vbCrLf
Str += "if (tab.rows(i).cells(0).innerText==val) {" + vbCrLf
Str += "tab.rows(i).style.backgroundColor='#0a246a';" + vbCrLf
Str += "tab.rows(i).style.color='white';" + vbCrLf
Str += "}" + vbCrLf
Str += "else {" + vbCrLf
Str += "tab.rows(i).style.backgroundColor='white';" + vbCrLf
Str += "tab.rows(i).style.color='black';" + vbCrLf
Str += "}" + vbCrLf
Str += "}" + vbCrLf
Str += "}" + vbCrLf
Str += "}" + vbCrLf
Str += "function hide() {" + vbCrLf
Str += "if (inLayer==false) {" + vbCrLf
Str += "document.all(gbID).style.display='none';}" + vbCrLf
Str += "}" + vbCrLf
Str += "function lostFocus() {" + vbCrLf
Str += "inLayer=false;}" + vbCrLf
Str += "function getfocus() {" + vbCrLf
Str += "inLayer=true;}" + vbCrLf
Str += "function setVal(DGID,DID,VID,des,val) {" + vbCrLf
Str += "if (des!=' ') {" + vbCrLf
Str += "document.all(VID).value=val;" + vbCrLf
Str += "document.all(DID).value=des;" + vbCrLf
Str += "}" + vbCrLf
Str += "else {" + vbCrLf
Str += "document.all(VID).value=0;" + vbCrLf
Str += "document.all(DID).value='';" + vbCrLf
Str += "}" + vbCrLf
'Str += "document.all(DID).style.backgroundColor='#0a246a';" + vbCrLf
'Str += "document.all(DID).style.color='white';" + vbCrLf
Str += "document.all(DGID).style.display='none';" + vbCrLf
Str += "}" + vbCrLf
Str += "function initWidth(GridID,DID,VID) {" + vbCrLf
Str += "var tab=document.all(GridID);" + vbCrLf
Str += "var val=document.all(VID).value;" + vbCrLf
Str += "if (tab!=null)" + vbCrLf
Str += "{" + vbCrLf
Str += "for(var i=0;i<tab.rows.length;i++) {" + vbCrLf
Str += "tab.rows(i).cells(0).style.display='none';" + vbCrLf
Str += "if (tab.rows(i).cells(0).innerText==val)" + vbCrLf
Str += "document.all(DID).value=tab.rows(i).cells(1).innerText;" + vbCrLf
Str += "}" + vbCrLf
Str += "}" + vbCrLf
Str += "}" + vbCrLf
Str += "</script>" + vbCrLf
Page.RegisterClientScriptBlock("Key1", Str)
End If
tbDes.Attributes.Add("onclick", "show('" + DG.ClientID + "','" + DataGrid1.ClientID + "','" + tbValue.ClientID + "')")
tbDes.Attributes.Add("onmouseover", "this.style.cursor='Default';")

End Sub

Public Sub BindDataGrid()Sub BindDataGrid(ByVal dt As DataTable)
DataGrid1.AutoGenerateColumns = False
Dim ID As New BoundColumn
ID.DataField = dt.Columns(0).ColumnName
'ID.Visible = False
'ID.ItemStyle = New CssStyleCollection("Display:none")
DataGrid1.Columns.Add(ID)

Dim ItemCn As New BoundColumn
ItemCn.DataField = dt.Columns(1).ColumnName
DataGrid1.Columns.Add(ItemCn)
DataGrid1.Columns(1).ItemStyle.Width = Unit.Pixel(cW1)
Dim ItemEn As New BoundColumn
ItemEn.DataField = dt.Columns(2).ColumnName
DataGrid1.Columns.Add(ItemEn)

DataGrid1.DataSource = dt
DataGrid1.DataBind()
If tbWidth <> 0 Then
TD1.Width = tbWidth
TD2.Width = tbWidth
End If
If DWidth <> 0 Then
DataGrid1.Width = Unit.Pixel(DWidth)
End If
If DHeight <> 0 Then
DataGrid1.Height = Unit.Pixel(DHeight)
End If
If _DivHeight <> 0 Then
DG.Style.Item("Height") = _DivHeight
End If
End Sub

Public Property BoxWidth()Property BoxWidth()
Get
Return tbWidth
End Get
Set(ByVal Value)
tbWidth = Value
End Set
End Property
Private cW1 As Integer

Public Property ColumnWidth1()Property ColumnWidth1()
Get
Return cW1
End Get
Set(ByVal Value)
cW1 = Value
End Set
End Property
Private cW2 As Integer

Public Property ColumnWidth2()Property ColumnWidth2()
Get
Return cW2
End Get
Set(ByVal Value)
cW2 = Value
End Set
End Property

Public Property SelectedValue()Property SelectedValue()
Get
Return tbValue.Text
End Get
Set(ByVal Value)
tbValue.Text = Value
End Set
End Property
Private DWidth As Integer

Public Property DataGridWidth()Property DataGridWidth()
Get
Return DWidth
End Get
Set(ByVal Value)
DWidth = Value
End Set
End Property
Private DHeight As Integer

Public Property DataGridHeight()Property DataGridHeight()
Get
Return DHeight
End Get
Set(ByVal Value)
DHeight = Value
End Set
End Property
Private _DivHeight As Integer

Public Property DivHeight()Property DivHeight()
Get
Return _DivHeight
End Get
Set(ByVal Value)
_DivHeight = Value
End Set
End Property

Private Sub DataGrid1_ItemDataBound()Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound
Dim txt As String, val
Dim i As Int16
Dim temp As String
If e.Item.ItemType <> ListItemType.Header And e.Item.ItemType <> ListItemType.Footer Then
'e.Item.Attributes("id") = e.Item.ItemType.ToString() + e.Item.ItemIndex.ToString()
'If e.Item.ItemType <> ListItemType.AlternatingItem Then
' e.Item.Attributes.Add("OnMouseOut", "this.style.backgroundColor='';")
'Else
' e.Item.Attributes.Add("OnMouseOut", "this.style.backgroundColor='oldlace';")
'End If
e.Item.Attributes.Add("OnMouseOut", "this.style.backgroundColor='white';this.style.color='black'")
e.Item.Attributes.Add("OnMouseOver", "getfocus();this.style.backgroundColor='#0a246a';this.style.color='white';this.style.cursor='Default';")

txt = e.Item.Cells(1).Text
val = e.Item.Cells(0).Text

e.Item.Attributes.Add("onclick", "setVal('" + DG.ClientID + "','" + tbDes.ClientID + "','" + tbValue.ClientID + "','" + txt + "','" + val + "');")
End If
End Sub
End Class

