我最近开始在ac#windows应用程序(表单)中使用Visual Studio 2010和SharpDevelop的最新版本的Crystal Reports.我从SAP下载了最新的Visual Studio 2010 Crystal DLL,并手动创建了对以下内容的引用
using CrystalDecisions.CrystalReports;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.ReportSource;
Run Code Online (Sandbox Code Playgroud)
然后我创建一个ReportDocument,以便我可以打开一个rpt文件:
ReportDocument rptDoc = new ReportDocument();
Run Code Online (Sandbox Code Playgroud)
这一切都很好.当我尝试使用rtpDoc对象做任何事情时,问题就出现了;
rptDoc.Load(@"c:\DialLeadsByDistributor.rpt");
Run Code Online (Sandbox Code Playgroud)
这就好像编译器没有意识到它是一个类对象,尽管当我将鼠标移到变量上时它会正确地报告它CrystalDecisions.CrystalReports.Engine.ReportDocument,但不仅智能感知不会向我显示对象的任何方法或属性,我得到了以下编译器错误让我难过:
无效的标记'('在类,结构或接口成员声明中
它将上述陈述称为违规行......
任何人都可以对此有所了解吗?如果我查看ReportDocument类的元数据,则确实包含三个Load方法,第一个方法接受一个字符串,即rpt文件路径.在Visual Studio 2010和SharpDevelop中出现此问题的事实至少是一致的,但对我来说仍然没有意义.
我有一个包含图片框的表单.当表单加载默认图像加载正常.然后,当表单中的某些内容发生更改时,我会更新图像,从而更改正在显示的图像 这个图像的生成也很好,我可以在磁盘上看到图像,并用油漆等打开它.一般来说,我在图像位置打开一个文件流,然后将图像设置到这个位置.
if (this.picPreview.Image != null)
{
this.picPreview.Image.Dispose();
this.picPreview.Image = null;
}
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
this.picPreview.Image = System.Drawing.Image.FromStream(fs);
Run Code Online (Sandbox Code Playgroud)
但无论我做什么,图像在表单上都显示为空白.我尝试刷新表单,刷新图片框控件,将其可见属性设置为可见,没有任何帮助.
我创建了一个单独的表单,其中只包含一个图片框并将图像位置传递给表单,并重复打开流的过程,然后将图像设置为此位置,它完美地工作.
没有异常被抛出AFAIK ...调试器被设置为在所有异常中断.
什么可能导致这种行为?
任何建议表示赞赏.我有另一个应用程序,它在后台工作线程中生成图像,并且工作正常.
也许提供更多关于我正在尝试做的事情的背景将帮助我深究这一点.对于datagridview中的每一行,都有一到三列具有与之关联的图像.我提前生成了所有这些图像.在网格中滚动我使用SelectionChanged事件获取了我的图片框中第一个图像列的预览图像.它完美地运作.我也有单元格,单击时显示一个窗体窗口,其中包含构成主窗体上图像的图像的预览.这也很完美.我可以更改行并单击网格中的单元格,一切正常.基本上我是根据用户在绑定到datagrid的其他控件上选择的内容构建一个新图像.
当我尝试更改主窗体上图片框中的图像时出现问题.我可以更新数据源,并看到网格值更新,但我现在使用第三方软件重新生成的图像,我可以验证它在磁盘上并且在更新发生后可以查看,只是消失了.一旦发生这种情况,我不再在表单的图片框中获取图像,直到我关闭表单并重新打开,然后所有更新的数据都存在,一切都恢复正常.在选择时调用的代码更改为设置图像与更新新图像的代码完全相同.它是完全同步的.除了从头开始用一个全新的形式,我的想法已经用完了.
再次感谢所有建议.
我将从顶部开始.整体流程如下:
打开一个包含绑定到SQL视图的数据网格的表单.dgv是只读的,一次只能选择一行.视图自动填充,以及绑定到网格的每列的控件.这些包括一些文本框,组合框和其他复选框.每行都有一组与之关联的图像.加载表单时,我可以向下滚动视图,对于每一行,表单上的图片框中会出现一个新图像.所有这些图像都已预先生成.当选择行时,该行最多可以有三个图像,在这种情况下,启用导航按钮以允许用户预览每个图像.
我选择一行,更改窗体上的控件以更改所选行中的一个或多个单元格值.然后我点击一个保存按钮,更新数据库和网格中的相应数据.然后我尝试更新此行的图像.此时图片框消失了,我一起丢失了表单上的预览; 直到我关闭并重新打开表单才会出现图像,并且一切都很好,直到我进行保存.
在尝试解决这个问题时,我发现更新绑定的dgv会导致selectchanged事件多次引发.有代码可以处理绑定未完成的情况,或者视图中没有选择任何内容.btnSave_Click处理程序中还有一些代码用于挂起selectionchanged事件处理程序,直到更新完成并重新生成图像.尽管如此,即使在视图中选择了我更新的行,实际选择的行(箭头所在的位置以及所有控件显示的内容)第一行始终是更新后的"当前"行.我不知道如何解决这个问题.以下是更改选择的代码和按钮保存事件处理程序.
以下是表单的屏幕截图:
以及selectionchanged和btn_save事件处理程序的代码:
/// <summary>
/// update the preview on a row selection change
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
if (!BindingComplete) return;
DataGridView dgv = (DataGridView)sender;
if (!dgv.Focused || dgv.CurrentRow == null) return;
// set …Run Code Online (Sandbox Code Playgroud) 我在Windows 7上使用Visual Studio 2010中的安装程序部署了一个应用程序.该程序在Windows 7和XP上部署并运行良好,但是当我在Windows 8系统上部署它时,我收到有关访问配置文件的错误.
程序安装在c:\ Program Files(x86)[公司名称] [App Name] \中,被引用的文件是一个临时文件,其名称看起来是由Windows GetTempFile生成的机器,例如x4q0toqw.tmp.这个文件夹中不存在,然后有一个exe配置文件的引用(myapp.exe.config,确实存在)
如果我在Windows 8系统上构建并运行代码,它安装并运行正常,我没有得到错误,但是如果我在Windows 7上部署Window 8编译的应用程序,我得到有关访问配置文件的相同错误.两台机器都是64位,但生成32位应用程序.
我不打算发布两个二进制文件.谁能告诉我发生了什么事?我正在尝试设置JIT调试,以便在抛出异常时附加到exe,因为本机调试它对我没有帮助,因为我没有得到例外.
谢谢,
加里
这是在两台不同的机器上,但我在两者上都登录了同一个域,并且是管理员.
这对我来说是第一次,我以为我完全失去了理智.我有一个简单的winform应用程序,我添加了一个datagridview.我使用我在其他六个项目中使用的相同源来设置dgv的数据源,并按照我想要的方式配置网格.除了网格之外,表单上没有其他任何内容,项目现在包含数据集,绑定源和表适配器.大.但是,设计者在执行此操作时生成的代码无效并导致编译错误,告诉我数据集表适配器对象和数据集本身不存在.
如果我进入编译错误的设计器,我会看到以下几行:
this.tILEDataSet = new ImageEdit.TILEDataSet();
this.logosTableAdapter = new ImageEdit.TILEDataSetTableAdapters.LogosTableAdapter();
Run Code Online (Sandbox Code Playgroud)
ImageEdit是我添加此绑定控件的类.如果我删除"ImageEdit.",代码编译并完美地工作.当然,由于这是一个设计器生成的文件,一旦我做了任何其他更改,它就会恢复为有问题的代码.
我做了三次,有三个不同的项目,两次从头开始,带有一个新的visual studio实例.
导致这种情况发生的可能是什么问题,并且除了手动编辑设计器文件之外还有其他方法,我从不喜欢这样做吗?
我没有改变任何东西,一切都是由设计师产生的.命名空间和类都是作为ImageEdit创建的.设计器包含以下定义:private TILEDataSet tILEDataSet; private TILEDataSetTableAdapters.LogosTableAdapter logosTableAdapter;
设计器类定义确实派生自global :: System.ComponentModel.Component:
public partial class LogosTableAdapter : global::System.ComponentModel.Component {
.
.
.
Run Code Online (Sandbox Code Playgroud)
再次感谢您的任何见解.
我需要创建一个包含HTML(表等)的日志文件.在winforms应用程序中似乎不支持HtmlTextWriter,它适用于ASP.NET.实际情况如此,如果是这样,哪些类可用于生成HTML?我试图使用FileStream/StreamWriter,但它会扼杀"非法字符".
这是即使是最简单的事情也不起作用的日子之一。TGIF。考虑以下代码来填充combobox已使用设计器放置在表单上的 :
cboDisposition.Items.Add("Choose");
cboDisposition.Items.Add("Use as Is");
cboDisposition.Items.Add("Rework");
cboDisposition.Items.Add("Scrap");
cboDisposition.Items.Add("Return to Vendor");
cboDisposition.Items.Add("Void");
cboDisposition.DropDownStyle = ComboBoxStyle.DropDownList;
cboDisposition.SelectedIndex = 0;
Run Code Online (Sandbox Code Playgroud)
设置SelectedIndex导致异常的原因:ex = {"Object reference not set to an instance of an object."}
并且SelectedIndex被设置为-1。将值设置为和integer之间的任何其他值都可以正常工作。为什么会发生这种情况?15
感谢您的任何建议。