您的位置:首页 > Web前端 > HTML

silvelight中操作html页面元素

2008-06-10 10:37 267 查看
  在上一篇文章(silverlight与javascript交互操作 )中,我们通过属性绑定([ScriptableType])的方式

进行了js与silverlight之间的互操作.

其实只就实现这个DEMO而言,还有更加直接简单的方式,就是使用:

HtmlPage.Document.GetElementById()

首先,我们需要建立一个项目silverlight项目, 名称为: HtmlDOM

还是将上一篇中的EmployeeInfo.cs拷贝到当前项目下,并将其修改成如下内容:

public class EmployeeInfo

{

/// <summary>

/// 雇员编号

/// </summary>

public int EmployeeNo { get; set; }

/// <summary>

/// 雇员名称

/// </summary>

public string EmployeeName { get; set; }

/// <summary>

/// 地址

/// </summary>

public string Address { get; set; }

}

/// <summary>

/// 雇员事件参数(用于完成与js绑定事件参数)

/// </summary>

public class EmployeeInfoEventArgs : EventArgs

{

public EmployeeInfo employeeInfo { get; set; }

}

/// <summary>

/// 雇员信息管理类

/// </summary>

public class EmployeeManager

{

public IEnumerable<EmployeeInfo> employeeList;

/// <summary>

/// 初始化会员数据

/// </summary>

public EmployeeManager()

{

//初始化雇员数据

employeeList = new List<EmployeeInfo>()

{

new EmployeeInfo(){EmployeeNo = 10001, EmployeeName = "张三" , Address = "北京"},

new EmployeeInfo(){EmployeeNo = 10002, EmployeeName = "李四" , Address = "北京"},

new EmployeeInfo(){EmployeeNo = 10003, EmployeeName = "王五" , Address = "北京"},

new EmployeeInfo(){EmployeeNo = 10004, EmployeeName = "马六" , Address = "北京"},

new EmployeeInfo(){EmployeeNo = 10005, EmployeeName = "王大麻子" , Address = "北京"},

new EmployeeInfo(){EmployeeNo = 10006, EmployeeName = "王宝强" , Address = "北京"},

new EmployeeInfo(){EmployeeNo = 10007, EmployeeName = "王蛋蛋" , Address = "北京"},

new EmployeeInfo(){EmployeeNo = 10008, EmployeeName = "王五强" , Address = "北京"}

};

}

/// <summary>

/// 获取指定数量的雇员数据

/// </summary>

/// <param name="count">要获取的雇员信息数</param>

/// <returns></returns>

public IEnumerable<EmployeeInfo> GetEmployeeList(int count)

{

return (from e in employeeList

select new EmployeeInfo

{

EmployeeNo = e.EmployeeNo,

EmployeeName = e.EmployeeName,

Address = e.Address

}).Take(count);

}

}


  而xaml代码还是延用上一篇文章中的内容如下:

<Grid x:Name="LayoutRoot" Background="White">

<Grid.RowDefinitions>

<RowDefinition Height="300" />

</Grid.RowDefinitions>

<my:DataGrid  x:Name="EmployeeList"  Grid.Row="1"  AutoGenerateColumns="True" Height="280" Margin="5,5,5,5" AlternatingRowBackground="AliceBlue" RowBackground="BlanchedAlmond">

</my:DataGrid>

</Grid>


而下面的就是相应的page.xaml.cs代码,如下(相关内容见注释):

public partial class Page : UserControl

{

public Page()

{

InitializeComponent();

this.Loaded += Page_Loaded;

this.EmployeeList.BeginningCellEdit += new EventHandler<DataGridCellEditingCancelEventArgs>(EmployeeList_BeginningCellEdit);

}

void Page_Loaded(object sender, RoutedEventArgs e)

{  //创建"加载数据"的button并绑定相应的onclick事件

HtmlElement button = CreateElement("input");

button.SetAttribute("type", "button");

button.SetAttribute("value", "加载数据");

button.AttachEvent("onclick", new EventHandler<HtmlEventArgs>(button_Click));

GetElement("EmployeeManage").AppendChild(button);

}

void button_Click(object sender, HtmlEventArgs e)

{

LoadData(7);//先取出7条数据

}

/// <summary>

/// 击编辑雇员列表信息事件

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

void EmployeeList_BeginningCellEdit(object sender, DataGridCellEditingCancelEventArgs e)

{

//当有要编辑的信息时

if (EmployeeList.SelectedItem != null)

{

EmployeeInfo employeeInfo = EmployeeList.SelectedItem as EmployeeInfo;

GetElement("employeeNo").SetAttribute("value", employeeInfo.EmployeeNo.ToString());

GetElement("employeeName").SetAttribute("value", employeeInfo.EmployeeName);

GetElement("address").SetAttribute("value", employeeInfo.Address);

}

}

/// <summary>

/// 获取指定ID的HTML元素

/// </summary>

/// <param name="ElementID"></param>

/// <returns></returns>

HtmlElement GetElement(string ElementID)

{

return HtmlPage.Document.GetElementById(ElementID);

}

/// <summary>

/// 创建指定tagname的元素

/// </summary>

/// <param name="tagname"></param>

/// <returns></returns>

HtmlElement CreateElement(string tagname)

{

return HtmlPage.Document.CreateElement("input");

}

//这里必须声明是public,否则js调用该方法时会报错

public void LoadData(int count)

{

//加载指定数据的雇员信息

EmployeeList.ItemsSource = new EmployeeManager().GetEmployeeList(count);

}

}

  而相应的aspx页面就不用再多写什么js脚本了.大家下载本DEMO中的源码后一看便知:)

好了,今天的内容就到这里了:)

源码下载链接,请点击这里:)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: