Unity中表格制作与动态生成

实现效果

  UGUI原生没有表格插件,网上找的表格制作教程做出来的不是我想要的那种效果@_@自己摸索了一会,效果图如下:

表体制作

  • 新建一个Scroll View,命名为Body,表示整个表的可见范围
  • Body->Viewport->Content上绑定组件Vertical Layout Group,使得Content的所有子物体成组垂直排列,就像表格的每一行

表头制作

  • 再新建一个Scroll View,命名为Title,表示表头(之所以用ScrollView是因为我这里表头过长,所以需要能够横向滚动)
  • 为Title绑定Horizontal Bar,注意需与Body的Horizontal Bar一致,以实现表头表体一起横向卷动
  • Title->Viewport->Content上绑定组件Horizontal Layout Group,使得Content的所有子物体水平排列,就像表格的每一列

动态生成

  • 制作记录prefab
    • 新建空物体,命名为Record
    • Record上添加组件Horizontal Layout Group
    • 右键Record,创建1个Choose Button(可选)及n个Input Field(n为表格的列数)
    • 将Record做成prefab

【注:这里用Input Field不用Text是因为这样的表格可实现每一格都可以编辑,不需要这个功能可以直接用Text】

  • 控制记录的生成(以显示数据库查询结果为例)
DataSet ds = DataBase.Instance.Query(selectCols, tables, cols, operations, values);
DataTable dt = ds.Tables[0];

// 显示查询结果
for (int i = 0; i < dt.Rows.Count; i++)
{
    // 实例化Record Prefab
    GameObject record = Instantiate(recordPrefab, recordContainer);
    // 找到Record下的各个InputField,更新它们的值为查询结果
    InputField ISBNInput = record.transform.Find("ISBN").GetComponent<InputField>();
    InputField booknameInput = record.transform.Find("bookname").GetComponent<InputField>();
    InputField pressnameInput = record.transform.Find("pressname").GetComponent<InputField>();
    InputField presscityInput = record.transform.Find("presscity").GetComponent<InputField>();
    InputField pressyearInput = record.transform.Find("pressyear").GetComponent<InputField>();
    ISBNInput.text = dt.Rows[i][0].ToString();
    booknameInput.text = dt.Rows[i][1].ToString();
    pressyearInput.text = dt.Rows[i][2].ToString();
    pressnameInput.text = dt.Rows[i][3].ToString();
    presscityInput.text = dt.Rows[i][4].ToString();
}

更多

关于每条记录的单选、多选效果详见我的另一篇博客http://blog.csdn.net/lemonxq/article/details/78801774
源码也在里面了=w=

猜你喜欢

转载自blog.csdn.net/LemonXQ/article/details/78810040