prakash prajuli Ответов: 1

Я пытаюсь динамически добавить флажок в подэлемент lisview в VB


динамическое добавление флажка в listview в качестве подпункта в vb как это сделать ? мой код не работает.. он создает три флажка в одном и том же месте в listview. я хочу добавить флажок в каждой строке один за другим..пожалуйста, помогите

Что я уже пробовал:

READER = command1.ExecuteReader

           While READER.Read()
               Dim item As New ListViewItem(READER.GetString("hos_id"))
               item.SubItems.Add(READER.GetString("name"))
               item.SubItems.Add(READER.GetString("room_no"))
               chk.Name = READER.GetInt32("hos_id")
               chk.Text = READER.GetInt32("hos_id")
               chk.Width = 70
               ListView1.Controls.Add(chk)
               AddHandler chk.CheckedChanged, AddressOf ChkBox_CheckedChanged
               ListView1.Items.Add(item)
           End While

1 Ответов

Рейтинг:
0

Jaroslav Mitrovic

Привет, Пракаш.

Чтобы сделать это правильно, потому что я не использую Listviews.

"Элемент" должен быть записью внутри Listview.

Сам пункт должен содержать "подпункты" ?

Можно ли использовать флажок также в качестве подпункта?

Так вот как это:

items.Subitems.add(chk) ???


и уберите эту линию:
ListView1.Controls.Add(chk)


А если вам нужно 3 флажка? (Я не вижу троих из них.)

Повторите пункты.Добавить строку(chk) с соответствующими именами переменных.

Может быть, с петлей внутри строки чтения.

Я бы попытался иметь только один элемент, который содержал бы флажки и все остальное, что считывается из "набора данных" (данные, которые объединены в один набор).

Так что если
Цитата:
Элементы listviewitem
может иметь Подэлементы и может иметь элементы управления внутри него, я бы сделал все данные, помещенные в элементы управления.
Так похожий
Цитата:
пункт.Подпункты.добавить(читатель.GetString("имя"))
пункт.Подпункты.добавить(читатель.И getString("room_no"))


Станет например:
item.Controls.Add(New Lable_xxx.Text = READER.GetString("name")
item.Controls.Add(New Lable_xxy.Text = READER.GetString("room_no")





Если вы используете WPF или UWP, пожалуйста, попробуйте использовать классы и Datatemplates.

Классы-это данные, считываемые из считывателя в объекты.

Они должны войти в ObservableCollection (то есть Вашего типа Classstype)

тогда ListView будет привязан к этой коллекции (ItemsSource).

В Xaml Datatemplate может выглядеть следующим образом:

<DataTemplate x:Key="LindenstrasseTemplate"
                      DataType="local:LindenstrasseWikiPediaEpisode">
            <Border BorderBrush="Black"
                    BorderThickness="2"
                    CornerRadius="4"
                    d:DesignHeight="150"
                    d:DesignWidth="600">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="1*" />
                        <RowDefinition Height="1*" />
                        <RowDefinition Height="1*" />
                    </Grid.RowDefinitions>
                    <Label Content="{Binding Titel}"
                           Margin="4"
                           FontSize="36"
                           FontWeight="Bold" />
                    <Grid  Grid.Row="1">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="120" />
                            <ColumnDefinition Width="80" />
                            <ColumnDefinition Width="80" />
                            <ColumnDefinition Width="Auto" />
                        </Grid.ColumnDefinitions>
                        <ProgressBar IsIndeterminate="{Binding Downloading, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                                     Grid.ColumnSpan="2"
                                     Grid.Column="1"
                                     Height="28"
                                     Margin="4,0"
                                     Visibility="{Binding Downloading, Converter={StaticResource BooleanToVisibilityConverter}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
                        <CheckBox Style="{StaticResource OrangeSwitchStyle}"
                                  IsChecked="{Binding DateiVorhanden, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                                  Margin="10,0,4,0"
                                  Grid.Column="0"
                                  HorizontalAlignment="Left" />
                        <Label Grid.Column="1"
                               Content="{Binding StaffelFolge, FallbackValue=999}"
                               Width="Auto" />
                        <Label Content="{Binding Folge}"
                               Width="Auto"
                               Grid.Column="2" />
                        <Label Content="{Binding Sendedatum}"
                               HorizontalAlignment="Stretch"
                               Width="Auto"
                               Grid.Column="3" />
                    </Grid>
                    <Label Grid.Column="0"
                           Content="{Binding Dateiname}"
                           Margin="4"
                           Grid.Row="2" />

                </Grid>
            </Border>
        </DataTemplate>


Список мой пример, но вы можете использовать элемента управления ListView, и установить ItemsSource к ObservableCollection, а также установить Свойства itemtemplate, что ListView может отображать элементы ListViewItems согласованно.
("Свойство selecteditem в переменную/свойство для получения информации о выбранных (набора данных)" только если вы, используя шаблон MVVM)

<ListBox x:Name="LBLindenstrasse"
                     VirtualizingPanel.IsVirtualizingWhenGrouping="True"
                     AlternationCount="3"
                     Grid.Column="0"
                     ItemsSource="{Binding LindenstrasseListe.DieEpisoden, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                     ItemTemplate="{StaticResource LindenstrasseTemplate}"
                     HorizontalContentAlignment="Stretch"
                     SelectedItem="{Binding LindenstrasseAusgewählteEpisode, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                     IsSynchronizedWithCurrentItem="True"
                     Background="#3F7742B5"
                     Grid.Row="1">



Пожалуйста, спросите больше о DataTemplates, если это необходимо.

c.u. Zui из Гамбурга, который никогда не использовал ListView (Хм, может быть, мне стоит попробовать его когда-нибудь...)


CHill60

Привет Ярослав, я удалил другие дублированные решения, основанные на вашей мольбе о помощи :-)

Jaroslav Mitrovic

thx. спаситель Вселенной lol