使用结合MSHTML与WebBrowser生成美观实用的WinForm应用程序(By Lostinet)中介绍的方法写程序时遇到的一个问题的解决方法。
在AxSHDocVw.AxWebBrowser控件加载的HTML文件中有一个Select,希望动态从数据库中取得列表内容放到该Select中,要求该Select的Option中显示部门的名称,同时选中某一Option时可以传递对应的部门编号,通过
mshtml.IHTMLElement2 eleSel = (mshtml.IHTMLElement2)doc.all.item("selName", null);
((mshtml.HTMLSelectElementClass)eleSel).innerHTML = "
1<option ...="">..</option>
";
是不行的。
是不行的。
尝试用页面中的javascript实现该操作:
1、在Winform窗体中定义一个public类型的字符串变量,用于传递给HTML文档,规定格式为“部门名称1#部门名称2#……;部门编号1#部门编号2#……”,即该字符串(strMoreUnit)的前半部分为部门名称,后半部分为部门编号,部门名称与部门编号之间用";"分隔,部门名称与部门编号内部以"#"分隔。这样的一个字符串很容易由循环在AxSHDocVw.AxWebBrowser控件的DocumentComplete事件中构造(应该使用System.Text.StringBuilder构造以提高效率)。
2、在被加载的HTML文件中定义函数:
function SetMoreUnit()
{
var strMoreUnit = document.MainForm.SetMoreUnit();
if (strMoreUnit != "")
{
var cAll = strMoreUnit.split(";");
var cName = cAll[0].split("#");
var cID = cAll[1].split("#");
for(i=0;i
1<cname.length;i++) ...="" 3、在html文件的<body="" ooption='document.createElement("OPTION");' ooption.innertext="cName[i];" ooption.value="cID[i];" selou.options.add(ooption);="" var="" {="" }="" 通过截取的字符串的方式循环为ooption设置innertext和value。="">标签中的"onLoad"事件中调用2中的函数SetMoreUnit()即可。</cname.length;i++)>