97 1 2021-01-23 22:22 采纳率: 0%
浏览 63
已结题

xamarin怎么实现类似C#datagridview控件的效果

数据想用表格展示出来,xamarin如何实现

  • 写回答

1条回答 默认 最新

  • 歇歇 2021-01-24 12:19
    关注

    Xamarin.Forms DataGrid

    控件出处

    https://components.xamarin.com/

    https://components.xamarin.com/gettingstarted/ZumeroDataGrid/true

    效果图

       

    上正文

    Xamarin.forms项目右键->管理NUGET

    Android、ios项目依次添加。

    注册控件

    Ios:

        AppDelegate.cs

        public override bool FinishedLaunching(UIApplication app, NSDictionary options)

    {

    global::Xamarin.Forms.Forms.Init();

       

    Zumero.DataGridComponent.Init();

         ……

    Android:

        MainActivity.cs

        protected override void OnCreate(Bundle bundle)

    {

    base.OnCreate(bundle);

       

    global::Xamarin.Forms.Forms.Init(this, bundle);

    Zumero.DataGridComponent.Init();

         ……

    Forms 应用

    Xaml:

        xmlns:d="clr-namespace:Zumero;assembly=Zumero.DataGrid" //声明

        应用如下:

    <d:DataGrid x:Name="datagrid" Rows="{Binding DataRows}" BackgroundColor="Black" RowHeight="40" HeaderHeight="40" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">

    <d:DataGrid.FrozenColumn>

    <d:Column Width="40">

    <d:Column.HeaderView>

    <Label Text="姓名" BackgroundColor="Gray" TextColor="Black" XAlign="Center" YAlign="Center"></Label>

    </d:Column.HeaderView>

    <d:Column.Template>

    <DataTemplate>

    <Label Text="{Binding SampleName}" BackgroundColor="White" TextColor="Black" XAlign="Center" YAlign="Center"></Label>

    </DataTemplate>

    </d:Column.Template>

    </d:Column>

    </d:DataGrid.FrozenColumn>

    <d:DataGrid.Columns>

    <d:DataGrid.Columns>

    <d:Column Width="150">

    <d:Column.HeaderView>

    <Label Text="文本" BackgroundColor="Gray" TextColor="Black" XAlign="Center" YAlign="Center"></Label>

    </d:Column.HeaderView>

    <d:Column.Template>

    <DataTemplate>

    <Label Text="{Binding SampleDescription}" BackgroundColor="White" TextColor="Black" XAlign="Center" YAlign="Center"></Label>

    </DataTemplate>

    </d:Column.Template>

    </d:Column>

    </d:DataGrid.Columns>

    </d:DataGrid>

    属性说明

            DataGrid

                Rows="{Binding DataRows}"     //数据源 固定写法对应后端代码 datagrid.Rows = new ObservableCollection<object>

                RowHeight="40"         //行高

                HeaderHeight="40"        //表头高度

            d:DataGrid.FrozenColumn        // Fxed列,固定不会随拖拽变动 同columns类似

            d:DataGrid.Columns            //列,格式同上文中内容

            d:Column.HeaderView            //列表头布局

            d:Column.Template            //列模板

            DataTemplate                //数据模板

            d:DataGrid.Columns-》d:Column-》d:Column.HeaderView-》Label

    d:Column.Template-》DataTemplate-》Label

    事件绑定

            <Button Text="详细" Clicked="OnCodeButtonClicked" BorderWidth="0" BackgroundColor="Green" TextColor="White"></Button>

            通过Clicked事件进行回调处理

    CS代码:

        初始化数据绑定:

        OpenCode、OpenXaml 参数类型对应 Func<Page>

        用于数据绑定按钮点击弹出对应上文中的 《详细》 Button

            protected override void OnAppearing()

            {

                base.OnAppearing();

       

                datagrid.Rows = new ObservableCollection<object>

                {

                    new SampleObject

                    {

                        SampleName = "Presidents",

                        SampleDescription = "Shows images, dates. Includes headers and a frozen column.",

                        OpenCode = () => { return new PresidentsCode(); },

                        OpenXaml = () => { return new PresidentsXaml(); },

                    },

                    new SampleObject

                    {

                        SampleName = "Countries",

                        SampleDescription = "Lots of rows. Unicode text.",

                        OpenCode = () => { return new CountriesCode(); },

                        OpenXaml = () => { return new CountriesXaml(); },

                    },

                    new SampleObject

                    {

                        SampleName = "Dynamic",

                        SampleDescription = "Dynamic generation of one million 'virtual' rows.",

                        OpenCode = () => { return new DynamicCode(); },

                        OpenXaml = () => { return new DynamicXaml(); },

                    },

                    new SampleObject

                    {

                        SampleName = "XSquared",

                        SampleDescription = "Includes slider controls with two way binding.",

                        OpenCode = () => { return new XSquaredCode(); },

                        OpenXaml = () => { return new XSquaredXaml(); },

                    },

                };

            }

        事件弹窗:

            void OnCodeButtonClicked(object sender, EventArgs args)

            {

                Button button = (Button)sender;

                this.Navigation.PushAsync(((SampleObject)button.BindingContext).OpenCode());

            }

    好文要顶 关注我 收藏该文  

    评论

报告相同问题?

悬赏问题

  • ¥15 链接问题 C++LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型
  • ¥15 求学软件的前人们指明方向🥺
  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接