我在Delphi QuickReport中用来创建报表和打印.在.NET C#中我可以用它来做什么?
我向我的项目(Winforms应用程序)添加了一些报告元素(Microsoft报告和Crystal报告),但我看到的是,我只能从数据库中插入数据.我想要的是使用在运行时创建的对象的值.这是因为我的报告实际上包含收据和发票.
哪个是最适合我需要的工具?
我想在一个中心画一个小圆圈DataGridViewCell.矩形也可以做到这一点.我假设我必须在CellPainting事件中这样做.
我试过这个:
if (e.RowIndex >= 0 && e.ColumnIndex >= 0)
{
if (dgv_Cuotas.Columns[e.ColumnIndex].Name == "Seleccionar" && Convert.ToBoolean(dgv_Cuotas.Rows[e.RowIndex].Cells["pagada"].Value) == true)
{
e.CellStyle.BackColor = Color.LightGray; ;
e.PaintBackground(e.ClipBounds, true);
e.Handled = true;
}
}
Run Code Online (Sandbox Code Playgroud)

它绘制了整个单元格,我只想要一个小圆圈或矩形,如下图所示:

我怎样才能做到这一点?使用DataGridViewImageCell不是一个选项,因为我有格式错误.我只是可以将DataGridViewCheckBoxCell更改为DataGridViewTextboxCell.
编辑: 我可以将其更改为DataGridViewImageCell !! 不知道之前发生了什么,但我仍然无法在那里加载图像.我只得到一个红十字的白色方块(没有图像图标).这是我的代码:
dgv_Cuotas.Rows[row.Index].Cells["Seleccionar"] = new DataGridViewImageCell();
dgv_Cuotas.Rows[row.Index].Cells["Seleccionar"].Value = Properties.Resources.punto_verde;
dgv_Cuotas.Rows[row.Index].Cells["Seleccionar"].Style.ForeColor = Color.White;
dgv_Cuotas.Rows[row.Index].Cells["Seleccionar"].Style.SelectionForeColor = Color.White;
Run Code Online (Sandbox Code Playgroud) 我想创建一个类似Lync 2013的弹出窗口:

我感兴趣的是用这个小插图形状创建一个控件.
我尝试在内部创建一个带有Canvas的UserControl,并创建一个带有形状的Path.但是我没有发现Canvas非常友好,所以我想知道我是否可以通过"边框"控件"玩"来实现这一点,以便只放置一个边框,然后放入一个网格.
这可能吗?有人可以帮助我走上正轨吗?
我正在设置ProducesResponseType,以便将其记录在Swagger中.
如果响应成功(OK => 200),则会产生IEnumerable.
[ProducesResponseType(typeof(IEnumerable<MyModel>), 200)]
Run Code Online (Sandbox Code Playgroud)
但是当我得到异常时,我会抓住它,然后生成我的自定义APIError类的对象.当我填充对象时,我可以设置不同的HttpStatusCodes,但最后,我想要的是能够设置ProducesResponseType是我所有剩余HttpStatusCodes的APIError类.我的意思是,我可以得到BadRequest,ServerInternalError,Forbidden等,但所有都会有相同的响应类型(ApiError).有没有办法为所有错误http代码设置这行代码?或者我需要逐个设置它?
[ProducesResponseType(typeof(ApiError), ???)]
Run Code Online (Sandbox Code Playgroud)
最终结果应如下所示:
[ProducesResponseType(typeof(IEnumerable<MyModel>), 200)]
[ProducesResponseType(typeof(ApiError), AllFailureHttpCodes)]
Run Code Online (Sandbox Code Playgroud) 我有一个填充了一组对象的表(mappedMenus).
MappedMenus是一个名为"menuTypeId"的类.
此属性"menuTypeId"的可能值在MenuTypes对象数组中设置,具有"id"和"name"属性.
使用这些MenuTypes对象,我填充每行的选择.
我遇到的问题是,我不知道如何将每个MappedMenu对象的"menuTypeId"属性绑定到其选择的选定选项.
正如您在我的代码中看到的那样,我使用mappedMenus 在tr中执行v-for .
对于每一个对象,我有一个行选择的选项.使用另一个名为menuTypes的数组填充选项.
然后我尝试将select与MappedMenu对象绑定在循环中(e.menuTypeId),然后绑定选项中的值.我没有得到以下代码的任何错误,但我也不起作用.
<table id="#divTable" class="uk-table">
<thead>
<tr>
<th>Menu Type</th>
</tr>
</thead>
<tbody>
<tr v-for="e in mappedMenus">
<td>
<select class="uk-select" v-model="e.menuTypeId">
<option v-for="m in menuTypes" v-bind:value="e.menuTypeId">{{m.name}}</option>
</select>
</td>
</tr>
</tbody>
</table>
<script>
var updateMenuVM = new Vue({
el: '#divTable',
data: {
menuTypes: [{ id: 1, name: 'Principal' }, { id: 2, name: 'Dessert' }, { id: 3, name: 'Drink' }],
mappedMenus: [{ menuName: 'Hamburger', menuTypeId: …Run Code Online (Sandbox Code Playgroud) 我有datagridview一个贷款显示分期付款.我创建了一个datagridviewcheckbox列,然后我可以选择我要支付的所有分期付款.
这是datagrid的一个屏幕:

我的问题是我需要禁用付费插件的复选框.在这种情况下,当"Restante"(剩下要付钱)是= 0.
我读了一些他们使用paint事件的帖子没有显示复选框单元格,但我不喜欢那个解决方案.我想隐藏了复选框单元格,但我不知道是否可以这样做.
多数民众赞成我的尝试:
foreach (DataGridViewRow row in dgv_Cuotas.Rows)
{
if (Convert.ToDecimal(dgv_Cuotas.Rows[row.Index].Cells[17].Value) == 0)
{
dgv_Cuotas.Rows[row.Index].Cells[16].Visible = false;
}
}
Run Code Online (Sandbox Code Playgroud)
显然这不起作用,我得到一个编译器错误消息,说该属性是只读的.
有人知道如何将复选框单元格设置为不可见吗?
为了以防万一,我附上了DataGridViewCheckboxColumn创建代码:
DataGridViewCheckBoxColumn chbox = new DataGridViewCheckBoxColumn();
{
chbox.CellTemplate = new DataGridViewCheckBoxCell();
chbox.HeaderText = "";
chbox.Name = "Seleccionar";
chbox.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
chbox.FlatStyle = FlatStyle.Standard;
}
dgv_Cuotas.Columns.Insert(16, chbox);
dgv_Cuotas.Columns[16].DisplayIndex = 0;
Run Code Online (Sandbox Code Playgroud)
编辑:
一些考虑:
我使用单元格内容点击事件来处理复选框,所以readonly不会工作.我想要的是隐藏复选框:
private void dgv_Cuotas_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex == -1)
return;
if (dgv_Cuotas.Columns[e.ColumnIndex].Name == "Seleccionar") …Run Code Online (Sandbox Code Playgroud) 正如标题所说,我将实体框架4.0用于财务应用程序.我有一个winform,我列出了我的所有支票(支票).但在该形式中,用户可以指定一些过滤器.

如果用户没有应用任何过滤器,我可以像这样进行查询:
lista_cheques = db.Cheque.Include("Operacion").Include("Cliente").ToList();
datagridview.Datasource = lista_cheques;
Run Code Online (Sandbox Code Playgroud)
这很简单.但是当它应用过滤器时,问题会变得更大.
如您所见,用户可以使用过滤器查看特定客户的检查(检查),日期,银行,CUIT号,检查状态等.
现在,我的问题与查询中的性能有关.
我正在考虑将过滤器分开,如下所示:
lista_cheques = db.Cheque.Include("Operacion").Include("Cliente").Where(x => x.fecha_deposito == fecha).ToList();
lista_cheques = lista_cheques.Where(x => x.banco.id_banco = banco).ToList();
lista_cheques = lista_cheques.Where(x => x.Operacion.Cliente.id_cliente = id_cliente).ToList();
Run Code Online (Sandbox Code Playgroud)
翻译:fecha是日期Operacion是一组支票Cliente是客户.
通过这种方式,我正在进行查询,然后是来自该查询结果的查询,然后是来自该新结果的新查询.
我认为这种方式可能会产生很大的性能问题.我知道SQL Server优化查询.因此,如果我正在进行碎片查询,则优化器无法正常工作.
我想到的另一种方式,但它非常繁琐,是创建一个大的查询来处理每个可能的过滤器选择.
例如,另一个例子是这样的:
lista_cheques = db.Cheque.Include("Operacion").Include("Cliente").Where(x => x.fecha_deposito == fecha && x.banco.id_banco = banco && x.Operacion.Cliente.id_cliente = id_cliente).ToList();
Run Code Online (Sandbox Code Playgroud)
最大的问题是我需要很多组合才能处理所有过滤器的可能性.
好的,现在,我会在第一个代码示例中遇到性能问题吗?我在那里对数据库做了一个大的查询,然后我在对象列表中进行查询(我认为会更快).我是这个ORM的新手,这个列表必须处理很多注册表..
我有人可以给我一些建议吗?我弄得很乱,希望你能理解......
我想使用c#在Windows窗体中自定义我的datagridviews.我想要做的是使用我制作的渐变绘制datagrid标题:
public void Colorear_Barra_abajo(object sender, PaintEventArgs e)
{
Rectangle r = new Rectangle(0,0, panel_Borde_abajo.Width, panel_Borde_abajo.Height);
if (r.Width > 0 && r.Height > 0)
{
Color c1 = Color.FromArgb(255, 54, 54, 54);
Color c2 = Color.FromArgb(255, 62, 62, 62);
Color c3 = Color.FromArgb(255, 98, 98, 98);
LinearGradientBrush br = new LinearGradientBrush(r, c1, c3, 90, true);
ColorBlend cb = new ColorBlend();
cb.Positions = new[] { 0, (float)0.5, 1 };
cb.Colors = new[] { c1, c2 , c3 };
br.InterpolationColors = cb;
// …Run Code Online (Sandbox Code Playgroud) 我正在使用 Datasnap.DBClient 从我的 Delphi 应用程序访问 SQL Server 数据库。
我有一个记录器记录我的应用程序中的每个异常,但我发现 SQL 异常消息真的很不友好。
示例:当我在 Delphi 中捕获 SQL 异常时,我得到的消息是:
EOleException:SQL 状态:42S22,SQL 错误代码:207
如果我在 SQL Profiler 中打开跟踪,我会收到两条消息:
第一个异常与应用程序显示的消息相同:
例外:错误:207,严重性:16,状态:1
第二个,是:
用户错误消息:无效的列名“Column1”
是否有可能从我的 Delphi 应用程序中捕获的异常中获取此UserErrorMessage?
我想记录delphi应用程序中引发的每个异常.为此,我在项目源代码中用我自己的一个覆盖了Application.OnException事件.
program Project;
uses
Vcl.Forms,
Unit1 in 'Unit1.pas' {Form1},
Logger in 'Logger.pas',
JCLDebugHandler in 'JCLDebugHandler.pas';
{$R *.res}
begin
Application.Initialize;
Application.OnException := TApplicationException.AppException;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Run Code Online (Sandbox Code Playgroud)
这很好用,但我没有抓住这个解决方案,在try-except块中捕获了异常.
当在except块中捕获异常时,它不会触发Application.OnException事件.
有没有办法首先在Application.OnException事件而不是except块中捕获它?
c# ×7
winforms ×5
datagridview ×3
delphi ×2
asp.net-core ×1
draw ×1
exception ×1
geometry ×1
onexception ×1
paint ×1
performance ×1
printing ×1
report ×1
sql-server ×1
swagger ×1
try-catch ×1
vuejs2 ×1
wpf ×1