插入操作后重新绑定列表视图

时间:2014-07-23 04:13:39

标签: c# sql-server wpf listview

我们有一个Listview。在列表视图中,我们有导入按钮将数据导入SQL SERVER数据库。

如果我尝试重新绑定Listview,导入数据后,它不会反映更改或重新绑定。

以下是我的代码段。

<Window x:Class="Searching.ImportedKeywords"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="ImportedKeywords" Height="418.769" Width="1332.12" Background="#FFFBF6E3">
    <Grid Margin="-1094,0,2,24" RenderTransformOrigin="0.621,0.497">
        <Grid.RowDefinitions>
            <RowDefinition Height="432*"/>
            <RowDefinition Height="350*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition Width="0*"/>
        </Grid.ColumnDefinitions>
        <ListView Name="lvShowSearching" Height="247" VerticalAlignment="Top" RenderTransformOrigin="2.25,3.86" Margin="1100,126,0,0" Grid.RowSpan="2">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="First Name" Width="70" DisplayMemberBinding="{Binding FirstName}" />
                    <GridViewColumn Header="Last Name" Width="70" DisplayMemberBinding="{Binding LastName}" />
                    <GridViewColumn Header="All Words" Width="100" DisplayMemberBinding="{Binding WithAllOfTheWords}" />
                    <GridViewColumn Header="Exact Phrase" Width="100" DisplayMemberBinding="{Binding WithTheExactPhrase}" />
                    <GridViewColumn Header="At Least One Word" Width="150" DisplayMemberBinding="{Binding WithAtLeastOneOfTheseWords}" />
                    <GridViewColumn Header="Without Word" Width="100" DisplayMemberBinding="{Binding WithoutTheWord}" />

                    <!--<GridViewColumn Header="Exact Date" Width="70" DisplayMemberBinding="{Binding ExactDate}" />
                    <GridViewColumn Header="Years" Width="70" DisplayMemberBinding="{Binding StartYear}" />
                    <GridViewColumn Header="Start Date" Width="70" DisplayMemberBinding="{Binding StartDate}" />
                    <GridViewColumn Header="End Date" Width="70" DisplayMemberBinding="{Binding EndDate}" />-->

                    <GridViewColumn Header="Country" Width="70" DisplayMemberBinding="{Binding CountryName}"/>
                    <GridViewColumn Header="State" Width="70" DisplayMemberBinding="{Binding StateName}" />
                    <GridViewColumn Header="City" Width="70" DisplayMemberBinding="{Binding CityName}" />
                    <GridViewColumn Header="Publication" Width="70" DisplayMemberBinding="{Binding PublicationName}" />
                    <GridViewColumn Header="Total Records" Width="100" DisplayMemberBinding="{Binding TotalRecords}" />
                    <GridViewColumn Header="Records Imported" Width="100" DisplayMemberBinding="{Binding TotalRecordsImported}" />
                    <GridViewColumn Header="Status" Width="70" DisplayMemberBinding="{Binding Status}" />
                    <GridViewColumn Header="Records To Import" Width="120">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <TextBox Width="70" Name="txtRecordsToImport" Text="{Binding RecordsToImport}"></TextBox>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                    <GridViewColumn Header="Import" Width="70">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <Button Click="Import_Click">Import</Button>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                </GridView>
            </ListView.View>
        </ListView>
        <Image HorizontalAlignment="Left" Source="Images/logonav2.png" Height="100" Margin="1100,5,0,0" VerticalAlignment="Top" Width="1190"/>
    </Grid>
</Window>

导入代码按钮:

private void Import_Click(object sender, RoutedEventArgs e)
        {
            DateFilter dateFilter = new DateFilter();
            SearchRequest objSearchRequest = new SearchRequest();
            ListViewItem grvRow = FindVisualParent<ListViewItem>(sender as UIElement);
            if (grvRow != null)
            {
                ClippingSearchKeyword objSearch = ((ClippingSearchKeyword)(grvRow).Content);

                if (objSearch.RecordsToImport == 0)
                {
                    MessageBox.Show("Please enter records to import.");
                    return;
                }

                objSearchRequest.LocationFilter.CitiesString = Convert.ToString(objSearch.CityID);
                objSearchRequest.LocationFilter.CountriesString = Convert.ToString(objSearch.CountryID);
                objSearchRequest.LocationFilter.StatesString = Convert.ToString(objSearch.StateID);
                objSearchRequest.LocationFilter.PublicationsString = Convert.ToString(objSearch.PublicationID);
                objSearchRequest.FirstName = objSearch.FirstName;
                objSearchRequest.LastName = objSearch.LastName;
                objSearchRequest.AllOfTheWordsString = objSearch.WithAllOfTheWords;
                objSearchRequest.WithoutWordsString = objSearch.WithoutTheWord;
                objSearchRequest.ExactPhraseString = objSearch.WithTheExactPhrase;
                objSearchRequest.AnyOfTheWordsString = objSearch.WithAtLeastOneOfTheseWords;
                objSearchRequest.AllOfTheWordsString = objSearch.WithAllOfTheWords;

                if (objSearch.ExactDate != null)
                {
                    dateFilter.SetExactDateFilter(objSearch.ExactDate.Value);
                    objSearchRequest.DateFilters.Add(0, dateFilter);
                }
                else if (objSearch.StartDate != null)
                {
                    dateFilter.SetBetweenDatesFilter(objSearch.StartDate.Value, objSearch.EndDate.Value);
                    objSearchRequest.DateFilters.Add(0, dateFilter);
                }
                else if (true)
                {
                    dateFilter.SetBetweenYearsFilter(objSearch.StartYears.Value, objSearch.EndYear.Value);
                    objSearchRequest.DateFilters.Add(0, dateFilter);
                }

                int count = new AdvancedSearching().SearchContent(objSearchRequest, objSearch.TotalRecords, objSearch.TotalRecordsImported, objSearch.RecordsToImport, objSearch.KeywordID);
                if (count == 0)
                {
                    MessageBox.Show("No record found to import.");
                }
                else
                {
                    MessageBox.Show(count + " Record(s) imported successfully.");
                    BindList();
                }
            }
        }

BindList();是绑定listview的方法。

public void BindList()
 {
    var data = objCommon.GetSearchKeywords();
    lvShowSearching.ItemsSource = data;
 }

另外,请建议一种更好地设计此网格的方法。我基本上是一名网络开发人员,但最近2-3天一直在研究WPF。

1 个答案:

答案 0 :(得分:0)

使用

<ListView Name="lvShowSearching" Height="247" VerticalAlignment="Top" RenderTransformOrigin="2.25,3.86" Margin="1100,126,0,0" Grid.RowSpan="2" ItemsSource={Binding Path=.}> 

而不是

<ListView Name="lvShowSearching" Height="247" VerticalAlignment="Top" RenderTransformOrigin="2.25,3.86" Margin="1100,126,0,0" Grid.RowSpan="2"> 

并在代码中

使用

lvShowSearching.UpdateLayout();

之后

lvShowSearching.ItemSource=data