【问题标题】:c# listview add 2nd column row datac# listview添加第二列行数据
【发布时间】:2019-11-20 17:42:41
【问题描述】:

所以我有一个 voteTotal 变量,它将计算总共 7 个州的选举人票。但是,数字位于第二列的不同行,但我不确定如何添加第二列中的选举人票。第一列是州名,第二列是选举人票总数。

我真的不知道如何调用这些行,所以我无法在每行的同一列 2 上添加正确的第 2-8 行。

int voteTotal = 0;
int stateNumOne = 0;
int stateNumTwo = 0;
int stateNumThree = 0;
int stateNumFour = 0;
int stateNumFive = 0;
int stateNumSix = 0;
int stateNumSeven = 0;

if (votesListView.Items.Count < 1)
{
    MessageBox.Show("List View can not be empty.");
}
if (votesListView.Items[0].SubItems[1] != null)
{
    stateNumOne = int.Parse(votesListView.Items[0].SubItems[1].Text);
    MessageBox.Show("1");
}
if (votesListView.Items[1].SubItems[1] != null)
{
    stateNumTwo = int.Parse(votesListView.Items[1].SubItems[1].Text);
    MessageBox.Show("2");
}
else if (votesListView.Items[2].SubItems[1] != null)
{
    stateNumThree = int.Parse(votesListView.Items[2].SubItems[1].Text);
}

/*
stateNumSix = int.Parse(votesListView.Items[6].SubItems[
stateNumFour = int.Parse(votesListView.Items[4].SubItems[1].Text);
stateNumFive = int.Parse(votesListVie1].Text);
stateNumSeven = int.Parse(votesListView.Items[7].SubItems[1].Text);
*/

voteTotal = stateNumOne + stateNumTwo + stateNumThree + stateNumFour + stateNumFive + stateNumSix + stateNumSeven;
totalLabel.Text = voteTotal.ToString();
totalVotesLabel.Visible = true;
totalLabel.Visible = true;

【问题讨论】:

  • Yopu 应该在edit 你的问题上添加一个标签,表明你正在使用的平台,因为每个上面都有一个ListView,我们真的不喜欢猜测。
  • 你的意思是像添加视觉工作室?
  • 没有。 Visual Studio 是一个开发环境,而不是一个平台。从您发布的代码看来,您使用的平台可能是 Xamarin.something。
  • 我认为它默认是 Xamarin,因为我刚刚下载了 Visual Studio 2017,仅此而已。谷歌表示“Visual Studio 2017 使您能够使用 Xamarin 和 C# 或 Java/C++ 构建原生 Android 应用程序,以及使用 Apache Cordova 6.3.1 和 JavaScript 和 TypeScript 构建混合 Android 应用程序”

标签: c# listview xamarin


【解决方案1】:

我不确定这是否是你想要做的,但对这篇文章 Xamarin.Forms: Get all cells/items of a listview 的第一个答案听起来像是你应该做的。

您应该使用数据绑定并使用它来获取数据。您不应该直接触摸单元格/项目。

不过话说回来,你的问题本身有点含糊。希望对你有帮助。

【讨论】:

  • 这没有帮助,但感谢您的尝试。所以下面是我的列表视图中的行/列的示例。我要做的是在我的列表视图中添加选举人票,该列表视图从第二行和第二列开始并上升。州名,选举人票俄勒冈州 7 华盛顿州 8 加利福尼亚州 55
  • 虽然数据绑定不能解决这个问题吗?然后你所做的就是将变量编辑为一个变量,并且由于单元格值绑定到它,它会随着变量的变化而变化。
  • 嗯,我遇到的问题是我知道如何检索第一行,但我认为我的代码不适合检索第二行。当我查看您向我展示的示例时,我感到困惑,因为我无法直观地看到代码将如何创建列表视图。在我的列表视图中,每行有 2 列,我只需要每行的第 2 列并添加它们。在示例中,我不确定它是否都在多列的一行中,或者如果有意义的话,它们是否都在多行中。
  • 您是否尝试过简单地获取项目数,然后遍历您的列表视图,根据您的循环索引添加从第二列获得的每个值?好像比一个一个做要简单得多
  • 哦,我不知道该怎么做
【解决方案2】:

你想达到如下截图的效果吗?

这是布局。

  <ListView  x:Name="listView" ItemsSource="{Binding MyModels} ">
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    <Grid >
                        <Grid.RowDefinitions>
                            <RowDefinition Height="*" />

                        </Grid.RowDefinitions>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="*" />
                        </Grid.ColumnDefinitions>

                        <Label Grid.Row="0" Grid.Column="0" Text="{Binding State}"
                            />
                        <Label Grid.Row="0" Grid.Column="1" Text="{Binding Votes}"

                           />
                    </Grid>


                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

这是后台代码。

  BindingContext = new MyViewModel();

这是MyViewModel的代码

 class MyViewModel
{
    public ObservableCollection<MyModel> MyModels { get; set; }
    public MyViewModel()
    {
        MyModels = new ObservableCollection<MyModel>();
        MyModels.Add(new MyModel() { State = "State Name", Votes = "Electoral Votes" 
        });
        MyModels.Add(new MyModel() { State = "Oregon ", Votes = "7" });
        MyModels.Add(new MyModel() { State = "Washington", Votes = "8" });
        MyModels.Add(new MyModel() { State = "California", Votes = "55" });
        MyModels.Add(new MyModel() { State = "lost1", Votes = "22" });
        MyModels.Add(new MyModel() { State = "lost2", Votes = "24" });
        MyModels.Add(new MyModel() { State = "lost3", Votes = "25" });
        MyModels.Add(new MyModel() { State = "lost4", Votes = "26" });
        MyModels.Add(new MyModel() { State = "lost5", Votes = "27" });

        int sumVotes = 0;
        for (int i=1;i<MyModels.Count;i++)
        {
            sumVotes+= Int32.Parse(MyModels[i].Votes);
        }
        MyModels.Add(new MyModel() { State = " ", Votes = 
        "sum"+sumVotes.ToString()});



    }
}

这里是MyModel的ID代码

     public class MyModel
{
    public string State { get; set; }
    public string Votes { get; set; }
}

【讨论】:

    【解决方案3】:
    
    int voteTotal = 0;
    int secondcolumn = 1;
    
        enter code here
    
    if (votesListView.Items.Count < 1)
        MessageBox.Show("List View can not be  empty.");
    else
        {
        for(int spot = 0; spot < votesListView.Items.Count; spot++)
            {
            voteTotal += int.Parse(votesListView.Items[spot].SubItems[secondcolumn].Text);
            //This will pop up a MessageBox at each iteration of this for loop.
            //feel free to comment out the MessageBox if it doesn't work.
            //you can also print out the voteTotal after the for loop.
            MessageBox.Show(spot.ToString());
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-16
      • 2020-02-28
      • 1970-01-01
      • 1970-01-01
      • 2016-04-07
      • 2013-02-24
      • 1970-01-01
      相关资源
      最近更新 更多