问题描述
我有项目。我从 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() };