簡體   English   中英

復制listview子項到變量

[英]copy listview subitems to variable

我已經在尋找任何解決方案,但找不到。 我已經在幾個網站/論壇中找到了數個討論我的問題的帖子,但是我想要一個非常簡單的解決方案。

while (SQLDataReader.Read())
                {
                    var view = new GridView();
                    view.Columns.Add(new GridViewColumn { Header = "User", DisplayMemberBinding = new Binding("User") });
                    view.Columns.Add(new GridViewColumn { Header = "hostNamedb", DisplayMemberBinding = new Binding("hostNamedb") });
                    view.Columns.Add(new GridViewColumn { Header = "fullName", DisplayMemberBinding = new Binding("fullName") });
                    view.Columns.Add(new GridViewColumn { Header = "location", DisplayMemberBinding = new Binding("location") });
                    view.Columns.Add(new GridViewColumn { Header = "department", DisplayMemberBinding = new Binding("department") });
                    view.Columns.Add(new GridViewColumn { Header = "position", DisplayMemberBinding = new Binding("postion") });
                    view.Columns.Add(new GridViewColumn { Header = "message", DisplayMemberBinding = new Binding("message") });
                    view.Columns.Add(new GridViewColumn { Header = "status", DisplayMemberBinding = new Binding("status") });
                    view.Columns.Add(new GridViewColumn { Header = "ip", DisplayMemberBinding = new Binding("ip") });

                    ListView2.View = view;
                    ListView2.Items.Add(new
                    {
                        User = SQLDataReader["User"].ToString(),
                        hostNamedb = SQLDataReader["hostNamedb"].ToString(),
                        fullName = SQLDataReader["fullName"].ToString(),
                        location = SQLDataReader["location"].ToString(),
                        department = SQLDataReader["department"].ToString(),
                        position = SQLDataReader["position"].ToString(),
                        message = SQLDataReader["message"].ToString(),
                        status = SQLDataReader["status"].ToString(),
                        ip = SQLDataReader["ip"].ToString(),
                    });
                }


                userName_click = System.Convert.ToString(ListView2.Items[var2].User.Text.ToString());
                hostName_click = System.Convert.ToString(ListView2.Items[var2].hostNamedb.Text.ToString());
                fullName_form = System.Convert.ToString(ListView2.Items[var2].SubItems[2].Text.ToString());
                location_form = System.Convert.ToString(ListView2.Items[var2].SubItems[3].Text.ToString());
                department_form = System.Convert.ToString(ListView2.Items[var2].SubItems[4].Text.ToString());
                position_form = System.Convert.ToString(ListView2.Items[var2].SubItems[5].Text.ToString());
                message_Form = System.Convert.ToString(ListView2.Items[var2].SubItems[6].Text.ToString());
                status_form = System.Convert.ToString(ListView2.Items[var2].SubItems[7].Text.ToString());
                id_form = System.Convert.ToString(ListView2.Items[var2].SubItems[8].Text.ToString());
                userIP_click = System.Convert.ToString(ListView2.Items[var2].SubItems[9].Text.ToString());

基本上,這里的代碼是這樣工作的:程序將從我的數據庫中獲取數據,然后將它們添加到我的Listview2中。

(此外,有人可以檢查將我添加到listview2的項目是否可以工作嗎?由於我確實必須進行大量重新編碼,因此我現在無法運行該程序。我正在從VB.NET遷移到C#WPF)。

繼續:每個變量,例如userName_click,都將從listview2-row-VAR2中獲取數據,列0到8。

我嘗試用諸如--(新的binding(“ user”))中的User之類的綁定名稱替換subitems [n],但是它不起作用。

順便說一下,這是我在listview2中的XAML代碼。

<ListView x:Name="ListView2" HorizontalAlignment="Left" Height="34" Margin="-10,446,-22,-50" VerticalAlignment="Top" Width="702" Grid.ColumnSpan="3" ClipToBounds="True">
            <ListView.View>
                <GridView ColumnHeaderContainerStyle="{DynamicResource CustomHeaderStyle}">
                    <l:FixedWidthColumn Header="username" DisplayMemberBinding="{Binding User}" FixedWidth="65"/>
                    <l:FixedWidthColumn Header="Host Name" DisplayMemberBinding="{Binding hostNamedb}" FixedWidth="65"/>
                    <l:FixedWidthColumn Header="fullname" DisplayMemberBinding="{Binding fullName}" FixedWidth="85"/>
                    <l:FixedWidthColumn Header="location" DisplayMemberBinding="{Binding location}" FixedWidth="65"/>
                    <l:FixedWidthColumn Header="department" DisplayMemberBinding="{Binding department}" FixedWidth="65"/>
                    <l:FixedWidthColumn Header="position" DisplayMemberBinding="{Binding position}" FixedWidth="65"/>
                    <l:FixedWidthColumn Header="message" DisplayMemberBinding="{Binding message}" FixedWidth="65"/>
                    <l:FixedWidthColumn Header="status" DisplayMemberBinding="{Binding status}" FixedWidth="65"/>
                    <l:FixedWidthColumn Header="id" DisplayMemberBinding="{Binding id}" FixedWidth="65"/>
                    <l:FixedWidthColumn Header="ip" DisplayMemberBinding="{Binding ip}" FixedWidth="65"/>

                </GridView>
            </ListView.View>
        </ListView>

您的解決方案沒有遵循,但是既然您知道綁定,我想您已經知道了。 我不能幫助您使現有代碼正常工作,而是建議以下內容:使用可觀察的集合來保存具有用戶,主機名數據庫等字段的DB對象。

public DbEntry(){
    user = SQLDataReader["User"].ToString();
    hostNamedb = SQLDataReader["hostNamedb"].ToString();
    fullName = SQLDataReader["fullName"].ToString();
    location = SQLDataReader["location"].ToString();
    ...

}

這些將填充您可觀察的集合。 接下來,您通過XAML中的ItemsSource綁定到該集合。

<ListView ItemsSource="{Binding DBObjectsCollection}">

現在,用數據填充變量僅是指定要從中獲取數據的“行”的索引,並獲取正確的字段或屬性的問題,例如

userName_click = DBObjectsCollection[2].user;

請注意,此代碼將不起作用。 這僅是成為如何解決WPF問題的基本指針。 關於WPF的信息已經很多,但如有任何疑問,請隨時提出問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM