Smobiler上海石磨_.NET移动开发平台

标题: Imagebutton的5个属性与ROW.Cell.Items[]中的5个属的对应关系? [打印本页]

作者: Csharp    时间: 2016-5-1 16:57
标题: Imagebutton的5个属性与ROW.Cell.Items[]中的5个属的对应关系?
     我自己的理解可能有误,请求官方正解,这几个概念太容易混淆了:

     Imagebutton控件的    DataMember(这个还是不可视值)    DisplayMember(绑定ImageButton的ResourceID属性)   ResourceID(直接给ID)     Text(这个是直接给文本吗?)      TextMember (绑定ImageButton的Text属性)




    在ROW.Cell.Items[]   中的  DataMember(对应上边DataMember?)    DisplayMember(对应上边DisplayMember即ResourceID么?)     Text(这个是TextMember么?)      Value(按以前的理解是DataMember)    DefaultValue(按之前的理解他对应ResourceID?)

作者: Csharp    时间: 2016-5-1 17:16
在 ROW.Cell.Items[]   中  DisplayMember 与 DataMember 都是只读。 现在我能通过 DefaultValue 去操作到 绑定控件的 ResourceID 。 但是通过 Text  与  Value 却无法操作到  绑定控件的 Text 与 DataMember
作者: Lincy.Lin    时间: 2016-5-3 11:26
Csharp 发表于 2016-5-1 17:16
在 ROW.Cell.Items[]   中  DisplayMember 与 DataMember 都是只读。 现在我能通过 DefaultValue 去操作到  ...

解答:ImageButton控件的DataMember,DisplayMember是用于GridView中数据绑定时指定绑定的字段,DataMember对应ROW.Cell.Items[]中的Value,TextMember对应ROW.Cell.Items[]中Text,DisplayMember对应ROW.Cell.Items[]中DefaultValue,请参考http://www.smobiler.com/bbs/foru ... &extra=page%3D1中的DefaultValue指定的映射的属性。
ResourceID是ImageButton控件的属性,用于指定ImageButton控件显示的图像的ID,Text用于指定ImageButton控件显示在图像下面的文本。

这里容易混淆的是基础控件和ROW.Cell.Items[]中的控件的属性,可以这样理解


由于GridView中需要指定一个Layout作为模板,这个Layout是一个窗体,所以为了使GridView在数据绑定时可以绑定模板控件中的数据,在基础控件中添加了DataMember,DisplayMember等属性。
控件中的DataMember用于指定ROW.Cell.Items[]中的Value
控件中的DisplayMemeber用于指定ROW.Cell.Items[]中的DefaultValue
由于ROW.Cell.Items[]的父类型是MobileViewCellItem,所以我们会看到有MobileViewCellItemImageButton这个类,它和基础控件的ImageButton的属性是对应的。MobileViewCellItem只用于使用了Layout作为布局的控件中。


目前使用Layout作为布局的有MobileForm的LeftLayout,RightLayout,FooterLayout,GridView

作者: Csharp    时间: 2016-5-3 16:29
在 ROW.Cell.Items[模板控件名]   中  DisplayMember 与 DataMember 都是只读的。

但是在 在 ROW.Cell.Items[模板控件名]   中Text  与  Value 属性是可以付值的。但是不能改写绑定控件的 Text 与 DataMember

ROW.Cell.Items[模板控件名] . DefaultValue ------的确可以改写到对应控件的绑定ResourceID

ROW.Cell.Items[模板控件名] .text ----- 无法改写到对应控件的绑定TextMember
ROW.Cell.Items[模板控件名] .value ------无法改写到对应控件的绑定DataMember




作者: Lincy.Lin    时间: 2016-5-4 17:55
Csharp 发表于 2016-5-3 16:29
在 ROW.Cell.Items[模板控件名]   中  DisplayMember 与 DataMember 都是只读的。

但是在 在 ROW.Cell.Ite ...

DataMember、DisplayMember和TextMember是指的Layout的界面(样式模板界面)控件中的数据绑定字段(只是用于数据绑定的),ROW.Cell.Items[模板控件名] 对应的父类型是MobileViewCellItem,它的DataMember、DisplayMember是从Layout界面控件中继承下来的(只是为了显示当前的值是从哪个字段绑定的),所以不能修改的。MobileViewCellItem的Text、Value和ResourceID是MobileViewCellItem中具体的属性,所以是可以被修改的。
作者: Csharp    时间: 2016-5-4 19:00
Lincy.Lin 发表于 2016-5-4 17:55
DataMember、DisplayMember和TextMember是指的Layout的界面(样式模板界面)控件中的数据绑定字段(只是用 ...

MobileViewCellItem的DefaultValue可以改到Layout界面控件的ResourceID

在MobileViewCellItem中如果也能修改Layout界面控件的DataMember、TextMember感觉更方便一点。


如果不能直接修改,哪么,我只有新增 table 的列,然后在Layout界面控件中去绑定。 如果可以像DefaultValue改到ResourceID哪样,哪就可以在遍历ROW.Cell.Items[模板控件名] 时,动态绑定了。
作者: oudi    时间: 2016-5-5 14:41
Csharp 发表于 2016-5-4 19:00
MobileViewCellItem的DefaultValue可以改到Layout界面控件的ResourceID

在MobileViewCellItem中如果也能 ...

MobileViewCellItem的DefaultValue并不是修改Layout界面控件的ResourceID,而是MobileViewCellImageButtonItem的ResourceID。

如果不能直接修改,哪么,我只有新增 table 的列,然后在Layout界面控件中去绑定。
这句话并不是特别理解,你是需要实现什么样的需求
作者: Csharp    时间: 2016-5-5 22:34
oudi 发表于 2016-5-5 14:41
MobileViewCellItem的DefaultValue并不是修改Layout界面控件的ResourceID,而是MobileViewCellImageButto ...

比如 DEMO 中的一段代码,我改成了 ImageButton1 ,假设他是  Layout 中的一个图片控铵控件

    ROW.Cell.Items["ImageButton1"]   

===========================================================

   foreach (GridViewRow ROW in GridView1.Rows)
                {
                    ROW.Cell.Items["ImageButton1"].DefaultValue  // 在这里这么用,可以改到ResourceID
                  
                    ROW.Cell.Items["ImageButton1"].Text  // 这里却改不到第一行ImageButton1控件的text

                    ROW.Cell.Items["ImageButton1"].Value // 这里却改不到第一行ImageButton1控件的value
                  

                }
作者: oudi    时间: 2016-5-6 09:48
Csharp 发表于 2016-5-5 22:34
比如 DEMO 中的一段代码,我改成了 ImageButton1 ,假设他是  Layout 中的一个图片控铵控件

    ROW.Cel ...

是可以修改到Text和Value的
代码如下:

  1.         private void SmobilerForm1_Load(object sender, EventArgs e)
  2.         {
  3.             //在GridView的Layout界面,添加一个ImageButton,并设置DataMember为Value,DisplayMemeber为Resource,TextMemeber为Text
  4.             DataTable dt = new DataTable("Temp");
  5.             dt.Columns.Add(new DataColumn("Resource", typeof(string)));
  6.             dt.Columns.Add(new DataColumn("Text", typeof(string)));
  7.             dt.Columns.Add(new DataColumn("Value", typeof(int)));

  8.             for (int i = 0; i <= 9; i++)
  9.             {
  10.                 DataRow row = dt.NewRow();
  11.                 row["Resource"] = i.ToString();
  12.                 row["Text"] = i.ToString();
  13.                 row["Value"] = i;
  14.                 dt.Rows.Add(row);
  15.             }

  16.             this.gridView1.DataSource = dt;
  17.             this.gridView1.DataBind();


  18.             ////设置为初始化值,在第二次测试时将注释取消
  19.             //foreach (GridViewRow row in this.gridView1.Rows)
  20.             //{
  21.             //    row.Cell.Items["imageButton1"].DefaultValue = "";
  22.             //    row.Cell.Items["imageButton1"].Text = "初始值";
  23.             //    row.Cell.Items["imageButton1"].Value = 0;
  24.             //}
  25.         }
复制代码

作者: Csharp    时间: 2016-5-6 18:48
oudi 发表于 2016-5-6 09:48
是可以修改到Text和Value的
代码如下:

可以了,就是这要的这个效果,关键代码就是你上边注释的部分。
作者: Csharp    时间: 2016-5-7 11:59
本帖最后由 Csharp 于 2016-5-7 12:04 编辑

以上代码可以执行。但是关于 Text 与 Value 属性能不能直接内置啊,这样就不用每一个 Imagebutton 的绑定都要自己按上边这样写一次了。
作者: oudi    时间: 2016-5-7 13:54
Csharp 发表于 2016-5-7 11:59
以上代码可以执行。但是关于 Text 与 Value 属性能不能直接内置啊,这样就不用每一个 Imagebutton 的绑定都 ...

Text的值可以内置
在Layout界面里的ImageButton控件里可以直接指定默认的ResourceID和Text属性值,不要指定DisplayMember和TextMemeber,那么在绑定GridView的DataSource时,直接按Layout默认的属性值。
  1.         private void SmobilerForm1_Load(object sender, EventArgs e)
  2.         {
  3.             //在GridView的Layout界面,添加一个ImageButton,设置属性Resrouce为1,设置Text为“测试”,设置DataMember为Value,DisplayMemeber留空,TextMemeber留空
  4.             DataTable dt = new DataTable("Temp");
  5.             dt.Columns.Add(new DataColumn("Value", typeof(int)));

  6.             for (int i = 0; i <= 9; i++)
  7.             {
  8.                 DataRow row = dt.NewRow();
  9.                 row["Value"] = i;
  10.                 dt.Rows.Add(row);
  11.             }
  12.             ////只绑定了Value的值,Resource和Text都使用控件默认属性值。
  13.             this.gridView1.DataSource = dt;
  14.             this.gridView1.DataBind();
  15.         }
复制代码

Value的值目前不可以内置




欢迎光临 Smobiler上海石磨_.NET移动开发平台 (https://www.smobiler.com/) Powered by Discuz! X3.2