我一直在研究一个使用WCF访问服务器端逻辑和数据库的WPF应用程序.
我开始使用一个WCF客户端代理对象,我反复使用它来调用服务器上的方法.使用代理一段时间后,服务器最终会抛出异常:
System.ServiceModel.EndpointNotFoundException: There was no endpoint listening at http://.../Service/BillingService.svc that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details. ---> System.Net.WebException: Unable to connect to the remote server ---> System.Net.Sockets.SocketException: An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full.
我认为这是因为每个服务调用都是从代理打开一个新的套接字到服务器,从不关闭它们.最终服务器被淹没并开始拒绝请求.
经过短暂的搜索,我确定我需要定期关闭()代理.我发现的样本简并很小.这个提供了一些有用的提示,但并没有真正回答这个问题.我也看到了避免使用using()模式的建议(并改为使用try/catch/finally),因为代理的Dispose方法可能抛出异常(yuck).
似乎推荐的模式正如此形成:
[TestClass]
public class WCFClientUnitTest
{
BillingServiceClient …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用MVVM设计模式实现我的第一个WPF应用程序.
我创建了一个数据绑定到ObservableCollection <>的应用程序.应用程序呈现正常,但我希望数据网格在单击列标题时重新排序行.
我研究过的帖子说:数据源必须实现IEnumerable,我的.我需要设置CanUserSortColumns和/或CanUserSort(在每列上).我可以通过指定Sorting回调函数来实现自定义排序.
这些似乎都没有帮助.在调试器中,我的_customerGrid_Sorting函数永远不会被调用,单击列标题也没有效果.
我是否遗漏了随后的XAML中的内容?我需要实现另一个接口吗?我现在感到非常失落,所以任何帮助都表示赞赏.
XAML:
<DataGrid Name="_customerGrid"
AutoGenerateColumns="False"
CanUserSortColumns="True"
ColumnHeaderStyle="{StaticResource columnHeaderStyle}"
HorizontalAlignment="Left"
ItemsSource="{Binding Path=AllCustomers}"
RowDetailsVisibilityMode="VisibleWhenSelected"
RowStyle="{StaticResource DataGridRowStyle}"
SelectionUnit="FullRow"
Sorting="_customerGrid_Sorting"
VerticalAlignment="Top">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Cust ID" MinWidth="90" CanUserSort="True" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Content="{Binding Path=CustID}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Name" MinWidth="300" CanUserSort="True" Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Content="{Binding Path=Name}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud) 我试图在SQL Server Reporting Services RDLC报告中表示父子孙关系.该报告将呈现为WPF应用程序中托管的reportviewer控件.我正在使用基于IEnumberable <>的CLR数据集,并将reportviewer数据源绑定到VM中的数据集.
我希望每个子实体显示在一个新页面上(如果数据集中有足够的子孙,则跨页面).
我目前有父实体的主报告,子项的子报告和子孙的另一个子报告.
每个报告都使用Tablix来布局页面上相应CLR类的字段.我在子项的子报表Tablix中分配了一个Group,并将PageBreaks设置为StartAndEnd(即在Group Properties对话框中选中了所有3个复选框).
在我能找到的任何地方,我已经关闭了.
遗憾的是,当我在"打印布局"模式下查看报表时,将忽略分页符,或者导出为PDF并且子报表中的子项全部一起流动而不会将分页符分隔开.
我在SO和MSDN上看到了几个关于不受欢迎的分页符的问题,但是我没有找到任何关于缺少分页符的讨论.
有谁知道如何强制分页符出现在子报告中?如果没有,是否有更好/替代的方式来表示这样的父/子数据而不使用子报告?
感谢您提供的任何见解.
FWIW,以下是可能相关的RDLC的一些摘录:
家长报告:
<TablixRow>
<Height>0.25in</Height>
<TablixCells>
<TablixCell>
<CellContents>
<Rectangle Name="Rectangle1">
<ReportItems>
<Subreport Name="InvoicePageDetail">
<ReportName>InvoicePageDetail</ReportName>
<Parameters>
<Parameter Name="InvoiceID">
<Value>=Fields!InvoiceID.Value</Value>
</Parameter>
<Parameter Name="CustID">
<Value>=Fields!CustID.Value</Value>
</Parameter>
</Parameters>
<Height>0.25in</Height>
<Width>6.4in</Width>
<Style>
<Border>
<Style>None</Style>
</Border>
</Style>
</Subreport>
</ReportItems>
<PageBreak>
<BreakLocation>End</BreakLocation>
</PageBreak>
</Rectangle>
<ColSpan>3</ColSpan>
</CellContents>
</TablixCell>
<TablixCell />
<TablixCell />
</TablixCells>
</TablixRow>
Run Code Online (Sandbox Code Playgroud)
分报告:
<?xml version="1.0" encoding="utf-8"?>
<Report xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner" xmlns="http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition">
<DataSources>
<DataSource Name="ISCBillingDataModel">
<ConnectionProperties>
<DataProvider>System.Data.DataSet</DataProvider>
<ConnectString>/* Local Connection */</ConnectString>
</ConnectionProperties>
<rd:DataSourceID>50ce54a7-32e3-46df-bd7c-97f194ba4390</rd:DataSourceID>
</DataSource>
</DataSources> …Run Code Online (Sandbox Code Playgroud) 我有一个窗口,里面有一个包含3个元素的DockPanel,一个停靠在顶部的MenuBar,一个停靠在底部的StatusBar和一个填充主体的TabControl.
至少,我希望TabControl能够填充身体.在视觉设计器中,TabControl和StatusBar并排排列,而不是顶部和底部.当我运行应用程序时,TabControl会扩展以填充MenuBar下面的DockPanel,并且StatusBar会消失.(我猜它被推离了父窗口的可见画布.)
我尝试根据此建议设置垂直和水平对齐.我尝试在StatusBar上设置ZIndex.我尝试使用堆栈面板(两者都停靠在DockPanel内并替换DockPanel).一切都无济于事:-(
以下是我用来渲染DockPanel的XAML的摘录.关于我做错的任何建议?有没有比使用DockPanel更好的方法呢?
<DockPanel>
<Menu Name="_menu" Height="23" HorizontalAlignment="Stretch" VerticalAlignment="Top" DockPanel.Dock="Top">
<MenuItem Header="_User Maintenance">
</MenuItem>
</Menu>
<TabControl
x:Name="_panel"
ItemsSource="{Binding Path=AllTabs}"
Margin="0,0,0,0"
Visibility="{Binding Path=Visibility}"
DockPanel.Dock="Top"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
>
</TabControl>
<StatusBar Name="_statusBar" DockPanel.Dock="Bottom" Margin="0,0,0,0" VerticalAlignment="Bottom">
<StatusBar.ItemsPanel>
<ItemsPanelTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="26"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
</Grid>
</ItemsPanelTemplate>
</StatusBar.ItemsPanel>
<StatusBarItem Grid.Column="0" Grid.Row="0">
<ProgressBar Name="_progressBar" Height="20" IsIndeterminate="True" Margin="4,0,4,0" VerticalAlignment="Top" Width="600"/>
</StatusBarItem>
</StatusBar>
</DockPanel>
Run Code Online (Sandbox Code Playgroud)
编辑:
通过向TabControl 添加DockPanel.Dock ="Top"以及HorizontalAlignment和VerticalAlignment ="Stretch",我能够将TabControl放在StatusBar上方而不是在可视化设计器中的旁边.现在,StatusBar仅在运行时为某些TabItem消失.
我的TabControl被数据绑定到一个ViewModel,它暴露了一个UserControl列表.每个UserControl都包含自己的数据绑定DataGrid(通常还有一些其他控件).在DataGrid仅显示几行的那些选项卡中,TabControl和TabItem仅伸展以包含UserGrid,使StatusBar在页面底部显示.在DataGrid显示许多行的那些选项卡上,TabControl会拉伸以填充窗口,以某种方式隐藏StatusBar.
如果它有帮助,这是我的DataGrid定义:
<DataGrid
Name="_customerGrid"
Grid.Column="0"
Grid.ColumnSpan="3"
Grid.Row="1"
AutoGenerateColumns="False"
CanUserSortColumns="True"
ColumnHeaderStyle="{StaticResource columnHeaderStyle}" …Run Code Online (Sandbox Code Playgroud)