首页 > 编程知识 正文

android listview控件,listview控件

时间:2023-05-03 12:52:07 阅读:178271 作者:3636

环境

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;
             }
         }
最终效果


版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。