c#如何做datalist这样的自定义控件

意思就是要能有成对的标签对,而且能取到中间加进去的标签值。... 意思就是要能有成对的标签对,而且能取到中间加进去的标签值。 展开
 我来答
lsvs2010
2009-07-14 · 超过24用户采纳过TA的回答
知道答主
回答量:120
采纳率:0%
帮助的人:49.3万
展开全部
新建控件库 项目,AssemblyInfo.cs 修改为
程序代码
using System.Reflection;
using System.Runtime.InteropServices;
using System.Security;

// 有关程序集的常规信息通过下列属性集
// 控制。更改这些属性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle( "ORRSG ")]
[assembly: AssemblyDescription( "ActiveX控件 ")]
[assembly: AssemblyConfiguration( " ")]
[assembly: AssemblyCompany( "麦壳饼小屋 ")]
[assembly: AssemblyProduct( "ORRActiveX ")]
[assembly: AssemblyCopyright( "版权所有 (C) MysticBoy Limited 2007 ")]
[assembly: AssemblyTrademark( " ")]
[assembly: AssemblyCulture( " ")]
[assembly: AllowPartiallyTrustedCallers()]
// 将 ComVisible 设置为 false 使此程序集中的类型
// 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型,
// 则将该类型上的 ComVisible 属性设置为 true。
[assembly: ComVisible(true )]

// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid( "f49a066c-1a61-4d05-8041-cb6948a85f72 ")]

// 程序集的版本信息由下面四个值组成:
//
// 主版本
// 次版本
// 内部版本号
// 修订号
//
// 可以指定所有这些值,也可以使用“修订号”和“内部版本号”的默认值,
// 方法是按如下所示使用“*”:
[assembly: AssemblyVersion( "1.0.* ")]
[assembly: AssemblyFileVersion( "1.0.0.0 ")]

新建一个接口 名为 IObjectSafety
添加
using System.Runtime.InteropServices;

/// <summary>
/// 这个guid不要更改
/// </summary>
[Guid( "CB5BDC81-93C1-11CF-8F20-00805F2CD064 "), InterfaceType(ComInterfaceType.InterfaceIsDual)]

public interface IObjectSafety
{
//
/// <summary>
///
/// </summary>
/// <param name= "riid "> </param>
/// <param name= "pdwSupportedOptions "> </param>
/// <param name= "pdwEnabledOptions "> </param>
void GetInterfacceSafyOptions(
System.Int32 riid,
out System.Int32 pdwSupportedOptions,
out System.Int32 pdwEnabledOptions);
/// <summary>
///
/// </summary>
/// <param name= "riid "> </param>
/// <param name= "dwOptionsSetMask "> </param>
/// <param name= "dwEnabledOptions "> </param>
void SetInterfaceSafetyOptions(
System.Int32 riid,
System.Int32 dwOptionsSetMask,
System.Int32 dwEnabledOptions);

}

新建一个控件
using System;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
using Microsoft.Win32;

namespace orRActiveX
{

/// <summary>
/// 用户控件。
/// </summary>
[ProgId( "ORRActiveX.ORRShowGlass ")] //我们的控件名
[Guid( "E6DB4C0C-4B29-4806-89B5-17DE7BB79C54 ")] //guid.
[ClassInterface(ClassInterfaceType.AutoDual)] //必须的,否则你无法调用 。
public partial class orRShowGlass : UserControl, IObjectSafety //集成用户控件和安全接口。
{

/// <summary>
/// 设置父对象。
/// </summary>
/// <param name= "hWndChild "> 在这里应该是本窗体本身 </param>
/// <param name= "hWndNewParent "> 要显示该窗体的对象。 </param>
/// <returns> </returns>
[DllImport( "user32.dll ")]
private static extern int SetParent(IntPtr hWndChild, int hWndNewParent);

/// <summary>
///
/// </summary>
public orRShowGlass()
{
InitializeComponent();
}
/// <summary>
/// </summary>
public void LoadMe(Int32 hWnd)
{
SetParent(this.Handle, hWnd);
}
/// <summary>
///
/// </summary>
/// <param name= "top "> </param>
/// <param name= "left "> </param>
public void SetLoc(Int32 top, Int32 left)
{
Left = left;
Top = top;
}

/// <summary>
///
/// </summary>
/// <param name= "width "> </param>
/// <param name= "height "> </param>
//[ComEventInterface() ]
public void SetSize(Int32 width, Int32 height)
{
Width = width;
Height = height;
}

/// <summary>
/// 注册函数,假如你能实现标准dll的方式的话,我们就可以做到完全的标准ocx了。
/// </summary>
/// <param name= "key "> 键值,这个是注册时,注册程序给程序传的。 </param>
[ComRegisterFunction()]
public static void RegisterClass(string key)
{
// 去掉这个, 我们不需要他 HKEY_CLASSES_ROOT\
StringBuilder sb = new StringBuilder(key);
sb.Replace(@ "HKEY_CLASSES_ROOT\ ", " ");
// 打开 CLSID\{guid}
RegistryKey k = Registry.ClassesRoot.OpenSubKey(sb.ToString(), true);
// 创建 'Control '键
//ActiveX 控件容器
RegistryKey ctrl = k.CreateSubKey( "Control ");
ctrl.Close();
// 创建CodeBase入口,- 这里是必须的.
RegistryKey inprocServer32 = k.OpenSubKey( "InprocServer32 ", true);
inprocServer32.SetValue( "CodeBase ", Assembly.GetExecutingAssembly().CodeBase);
inprocServer32.Close();
k.Close();
}

/// <summary>
/// 调用反注册控件
/// </summary>
/// <param name= "key "> Tke registry key </param>
[ComUnregisterFunction()]
public static void UnregisterClass(string key)
{
StringBuilder sb = new StringBuilder(key);
sb.Replace(@ "HKEY_CLASSES_ROOT\ ", " ");

// 打开HKCR\CLSID\{guid}
RegistryKey k = Registry.ClassesRoot.OpenSubKey(sb.ToString(), true);
// 删除 'Control '如果不存在,不要抛出错误
k.DeleteSubKey( "Control ", false);
// 下一步,打开InprocServer32
k.OpenSubKey( "InprocServer32 ", true);
//删除 CodeBase键,如果不存在,不要抛出错误
k.DeleteSubKey( "CodeBase ", false);
k.Close();
}

#region 为 html调用提供的接口。 IObjectSafety

/// <summary>
///
/// </summary>
/// <param name= "riid "> </param>
/// <param name= "pdwSupportedOptions "> </param>
/// <param name= "pdwEnabledOptions "> </param>
void IObjectSafety.GetInterfacceSafyOptions(int riid, out int pdwSupportedOptions, out int pdwEnabledOptions)
{
pdwSupportedOptions = 1;
pdwEnabledOptions = 2;
}

/// <summary>
///
/// </summary>
/// <param name= "riid "> </param>
/// <param name= "dwOptionsSetMask "> </param>
/// <param name= "dwEnabledOptions "> </param>
void IObjectSafety.SetInterfaceSafetyOptions(int riid, int dwOptionsSetMask, int dwEnabledOptions)
{
}

#endregion
}
}

然后需要给程序集添上 签名 。 在项目属性中的 生成菜单中选择 为 com Interop 注册 .

要在html中使用 使用下面的方法。
<body >
<object id= "23423 "
classid= "clsid:E6DB4C0C-4B29-4806-89B5-17DE7BB79C54 " >
</object>
</body>
classid 是程序中的控件前面的guid中的内容。
在vb6中调用时先引用生成的 tlb文件,和你的项目名相同。
程序中可以使用下面的方法。

Dim x As New orRShowGlass.ORRShowGlass

Private Sub Form_Load()
x.LoadMe hWnd
' x.SetLoc 1, 1 使用这个也可以
x.Top = 0
x.Left = 0
x.Width = Me.Width / 15
x.Height = Me.Height / 15
x.Refresh
End Sub

Private Sub Form_Resize()
x.Top = 0
x.Left = 0
x.Width = Me.Width / 15
x.Height = Me.Height / 15
x.Refresh
End Sub
server126
2009-07-14 · TA获得超过597个赞
知道小有建树答主
回答量:877
采纳率:0%
帮助的人:182万
展开全部
要设置模版

先在.cs文件里绑定数据库里的信息到datalist控件上
然后在aspx 编辑里 添加如:

<% Eval("id" %>
等。。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友5d654fa
2009-07-14 · 超过37用户采纳过TA的回答
知道小有建树答主
回答量:65
采纳率:0%
帮助的人:113万
展开全部
那是进行组件开发了,很麻烦的,有必要么。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式