环境
SmobilerDesigner 4.7
Visual Studio 2010及以上
正文
listview绑定数据
打开Visual Studio并创建新的SmobilerApplication项目。 从工具箱中拖动ListView、CheckBox、Label和Panel等控件到SmobilerFrom1.cs中。 布局如图所示
创建新的SmobilerUserControl类。 一旦命名为SmobilerUserControl1.cs,将Size设定为(300,50 ),然后单击CheckBox、Label、Panel控件、 拖动到CheckBox的datamemox中,将label的DisplayMember设置为lab,将Modifiers设置为public,将panel的Touchable设置为true (当panel的Touchable设置为true时
在设计器中打开SmobilerForm1.cs,然后单击listView1将TemplateControlName设置为SmobilerUserControl1
最后,在窗体的load事件中绑定数据源
privatevoidsmobilerform1_ load (object sender,EventArgs e ) ) ) ) ) ) ) ) ) ) )。
{
DataTable dt=new DataTable (;
dt.columns.add(id );
dt.columns.add('lab ' );
for(intI=0; i 5; I )
dt.Rows.add(I,'图书' i.ToString ) );
listView1.DataSource=dt;
listView1.DataBind (;
() ) ) ) )。
注:控件的数据成员和显示成员有什么不同? 数据成员是值绑定字段,而显示成员是显示绑定字段。 简单来说,它显示DisplayMember绑定的值,而不显示数据member。 在本示例中,label的DisplayMember将绑定后的值指定给了Text属性。 checkbox的数据成员将绑定并显示在界面中。 必须从checkbox.BindDataValue获得。
全部实现选择
思路:使用list保存检查项目。 每次选中listview的一个行项目时,都会在list中插入记录,如果取消选中,则会从list中删除记录。 如果list.Count和listview的行数相同,则意味着所有选择
1.SmobilerForm1.cs的代码
liststringselectitem=new list string (; //在此list中记录被选中的数据行id
///summary
//添加检查选项
////summary
///param name='item'/param
公共语音选择项(字符串项) )。
{
if (! Selectitem.contains(item ) )
slectitem.add(item;
() ) ) ) )。
///summary
//取消选择
////summary
///param name='item'/param
公共活动项目(字符串项目) )。
{
selectitem.contains (项目) )
selectitem.remove(item;
() ) ) ) )。
///summary
改变检查盒的状态
////summary
公共语音更改状态(
r> {if (selectItem.Count == listView1.Rows.Count)//selectItem的数量和listview.Rows的数量一致表示全选
checkBox1.Checked = true;
else
checkBox1.Checked = false;
}
/// <summary>
/// checkbox点击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (checkBox1.Checked)
{
foreach (ListViewRow row in listView1.Rows)//遍历listview.Rows
{
//(SmobilerUserControl1)row.Control即listview行模板
((SmobilerUserControl1)row.Control).checkBox1.Checked = true;//改变listview模板里中的checkbox值
AddSelectItem(((SmobilerUserControl1)row.Control).checkBox1.BindDataValue.ToString());//获取模板类中的checkbox的DataMember
}
}
else
{
foreach (ListViewRow row in listView1.Rows)
{
((SmobilerUserControl1)row.Control).checkBox1.Checked = false;
RemoveSelectItem(((SmobilerUserControl1)row.Control).checkBox1.BindDataValue.ToString());
}
}
2.SmobilerUserControl1.cs中,模板类使用(SmobilerForm1)this.Form来调用SmobilerForm1的属性、方法,将数据传给SMobilerForm1
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
SmobilerForm1 frm = (SmobilerForm1)this.Form;//获取listview所在窗体
if (checkBox1.Checked)
{
frm.AddSelectItem(checkBox1.BindDataValue.ToString());
}
else
{
frm.RemoveSelectItem(checkBox1.BindDataValue.ToString());
}
frm.changeState();
}
/// <summary>
/// panel点击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void panel1_Press(object sender, EventArgs e)
{
SmobilerForm1 frm = (SmobilerForm1)this.Form;
frm.label3.Text = label1.Text;//数据传给SMobilerForm1
}
运行效果
彩蛋
listview实现单双行间隔色
在4.7版本中,可以在ListView的RowBind事件中,通过设置 e.Row.Control.BackColor来设置不同的颜色,RowBind事件是在行绑定后发生,具体见(https://www.smobiler.com/Help/html/E_Smobiler_Core_Controls_ListView_RowBind.htm),代码如下
bool flag = true;//通过flag判断单双行
private void listView1_RowBind(object sender, ListViewTemplateBindEventArgs e)
{
if (flag)
{
e.Row.Control.BackColor = System.Drawing.Color.White;//第0行开始,偶数白色单数蓝色
flag = !flag;
}
else
{
e.Row.Control.BackColor = System.Drawing.Color.SkyBlue;
flag = !flag;
}
}
最终效果