关于按下一行后获取数据

问题描述

我有项目。我从 Post Json 获取数据。我的模型名称是“模型”。我有一张桌子。我是用网格做的。按行并将值发送到另一个页面后,我需要获取数据( model[i].InvoiceID )。例如,如果我按第一行,我需要得到 model[0].InvoiceID。如果我按第二行,我需要像这样得到 model[1].InvoiceId。但该行的计数总是在变化。所以我用 for 循环做了行。那么如何像我问的那样添加点击事件?我尝试在循环中使用 tapgesture 但它总是出错。像索引错误或者如果我改变它总是显示最后一个索引值。我该如何解决?谢谢你的建议

for ( int i = 0; i < counter; i++)
{
    var tga = new TapGestureRecognizer { NumberOfTapsrequired = 1 };

    tga.Tapped += (s,e) =>
    {
        Navigation.PushAsync(new Page1(model[i].InvoiceID.ToString()));
    };
   
    var max = model[i].CustomerName.Length;
    if (max > 45)
    {           
            gr.Children.Add(new Label
            {
               
                Text = $"{model[i].CustomerName}".Substring(0,45),TextColor = System.Drawing.Color.Black,FontSize = 16,Padding = new Thickness(10,10),HorizontalOptions = Layoutoptions.Start,VerticalOptions = Layoutoptions.Center,LineBreakMode = LineBreakMode.TailTruncation,},1,2 * i + 3);;           
       
    }
    else
    {
        gr.Children.Add(new Label
        {
            Text = $"{model[i].CustomerName}",2 * i + 3);
    }        
    
    if (model[i].TransportTypeName == "ACİL")
    {
        gr.Children.Add(new BoxView
        {
            Color = Xamarin.Forms.Color.FromHex("#a22227"),Margin=new Thickness(-6,-5)
        },3,2 * i + 3);
        gr.Children.Add(new Label
        {
            Text = $"{model[i].TransportTypeName}",TextColor = System.Drawing.Color.White,HorizontalOptions = Layoutoptions.Center,VerticalOptions = Layoutoptions.Center
        },2 * i + 3);
       
    }
    else
    {
        gr.Children.Add(new Label
        {
            Text = $"{model[i].TransportTypeName}",2 * i + 3);
    }

    var ta = new Label
    {

        Text = $"{model[i].ItemCount}",VerticalOptions = Layoutoptions.Center
    };
    ta.GestureRecognizers.Add(tga);
    gr.Children.Add(ta,5,2*i+3);

    //gr.Children.Add(new Label
    //    {
    //        Text = $"{model[i].ItemCount}",//        TextColor = System.Drawing.Color.Black,//        FontSize = 16,//        Padding = new Thickness(10,//        HorizontalOptions = Layoutoptions.Center,//        VerticalOptions = Layoutoptions.Center
    //    },2 * i + 3);
   
    gr.Children.Add(new Label
    {
        Text = $"{model[i].ItemAmount}",VerticalOptions = Layoutoptions.Center
    },7,2 * i + 3);
}

这就是我想要的:https://prnt.sc/10og9fq

我点击“ta”标签时的错误(我点击了):计数器是我的模型计数。它是 6。所以我有 model[5].InvoiceId 但仍然给出那个错误

System.ArgumentOutOfRangeException: 'Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index'

如果我使 (count-1) 它的修复索引错误,但我不能使用它。因为我必须用计数循环创建标签。但即使我将它设置为 count-1,它也只是提供最后一个索引数据。

解决方法

growth.model<-function(theta,x0){ theta[1]*(1-exp(-theta[2]*x0)) } sse<-function(theta,y0,x0){ sum((y0-growth.model(theta,x0))^2) } sse<-function(theta,x0){ return(sum((y0-theta[1]+theta[2]*exp(-theta[3]*x0^theta[4]))^2)) } fit<-nlminb(start = c(1,1),objective = sse,y0=y0,x0=x0) fit est<-fit$par est 的值是在事件处理程序触发时计算的,而不是在您创建它时计算

i

代替

tga.Tapped += (s,e) =>
{
    Navigation.PushAsync(new Page1(model[i].InvoiceID.ToString()));
};

然后

var tga = new TapGestureRecognizer { NumberOfTapsRequired = 1,ClassId = model[i].InvoiceID.ToString() };