我有一个小型的WinForms演示应用程序.其中一个表格是我的添加新人表格.我使用了详细信息视图而不是DataGridView我的数据源.当我输入数据并单击导航器上的保存按钮时,没有任何更改,但是我在表单中放置了一个MovePrevious和一个MoveNext后,一切都按预期工作.AddNewLoad
public partial class AddPersonForm : Form
{
private readonly DemoContext _context;
public AddPersonForm()
{
_context = new DemoContext();
InitializeComponent();
}
protected override void OnLoad(EventArgs e)
{
_context.People.Load();
personBindingSource.DataSource = _context.People.Local.ToBindingList();
personBindingSource.AddNew();
personBindingSource.MovePrevious();
personBindingSource.MoveNext();
base.OnLoad(e);
}
private void personBindingNavigatorSaveItem_Click(object sender, EventArgs e)
{
int changes = _context.SaveChanges();
Debug.WriteLine("# of changes: " + changes);
}
}
Run Code Online (Sandbox Code Playgroud)
为什么我需要在识别更改并保存之前切换BindingSource位置?
我想阻止按钮点击排队.在测试中,我有一个Form,一个Button,在Code-Behind中我有事件处理程序:
private void button1_Click(object sender, EventArgs e)
{
if (_codeRunning)
return;
_codeRunning = true;
//Application.DoEvents();
//button1.Enabled = false;
_click ++;
Debug.WriteLine("Click Number: " + _click);
Task.Delay(5000).Wait();
//button1.Enabled = true;
_codeRunning = false;
}
Run Code Online (Sandbox Code Playgroud)
当我运行调试并快速单击按钮两次或三次或四次时,"调试输出"会在最后一次显示后大约五秒钟显示每次单击.我希望它显示的是单击并删除其余部分,直到第一个事件完成.
我还尝试禁用该按钮,以及暂时从Button_click事件中删除Handler.结果都是一样的.
在检查这些 SO 文章后:cascade-delete-in-entity-framework、ef6-1-soft-delete-with-cascade-delete、cascading-soft-delete、method-for-cascading-soft-deletes-in-parent-子关系和级联软删除的原因,但没有找到解决方案......
我让 SoftDelete 为我的实体模型工作。我SaveChanges()在我的上下文中覆盖了:
public override int SaveChanges()
{
ChangeTracker.DetectChanges();
foreach (DbEntityEntry<ISoftDeletable> entity in ChangeTracker.Entries<ISoftDeletable>())
{
if (entity.State == EntityState.Deleted)
{
entity.State = EntityState.Modified;
entity.Entity.IsDeleted = true;
}
}
return base.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
我已经为我的子实体设置了 CascadeOnDelete。因为我覆盖了删除的EntityState它不会级联。有人知道只将导航属性放入foreach循环中的方法吗?还是处理 SoftDeletes 的更好方法?
先感谢您,
一切都在调试模式下工作,但在发布模式下崩溃.调试模式中哪些必需权限在发布模式下未打开?
编辑
当我将链接设置为无时,我通过第一个屏幕进入我的登录屏幕.但是,当我添加了Release权限时Internet,它第一次尝试读取远程实体框架核心表时崩溃了.
编辑2
在发布模式下,如果我检查Use Shared Runtime,该应用程序运行正常.
编辑3
我暂时在Release模式下启用了Debugging.以下行仅在发布模式下抛出System.TypeInitializationException:
if (_context.bma_users.Any(p => p.username == _name.Text) && _name.Text != string.Empty)
Run Code Online (Sandbox Code Playgroud) 我有一个 ASP.NET Core 5 API 设置。我还有一些使用静态内容的 Razor 页面。我正在使用 JWT 进行身份验证。在我的文件中,UserController我有一个操作存根,我正在其中开发更改密码操作:
[Authorize]
[HttpPost("ChangePassword")]
public IActionResult ChangePassword([FromBody] string password)
{
HttpContext.Items.TryGetValue("User", out var user);
_logger.ForContext<UsersController>().Debug("User {EmailAddress} tried to change his password to {Password}.", ((User)user).EmailAddress, password);
return Ok();
}
Run Code Online (Sandbox Code Playgroud)
这可以通过 Swagger 测试并记录。我还有其他 POST 操作。这是我第一次尝试让用户使用HttpContext.
然而,只有通过这个新操作,我才会在日志中收到两个条目:
2021年7月23日21:36:24.612 不支持POST请求
2021年7月23日21:36:24.605 不支持POST请求
日志 (Seq) 显示SourceContext是Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware。
我想知道为什么我会收到这两个日志条目,我可以安全地忽略它们吗?
我有一个简单的单元测试:
[TestMethod]
public void TestInitDatabases()
{
Debug.WriteLine("Testing loading up all databases!");
Assert.IsTrue(Library.InitDatabase());
}
Run Code Online (Sandbox Code Playgroud)
并且ClassLibrary中的方法试图加载具有58,139条记录的实体.
public static bool InitDatabase()
{
Debug.WriteLine("Loading Entities");
var startTime = DateTime.Now;
DContext.Database.CommandTimeout = 180;
DContext.Database.Log = Console.WriteLine;
Task task = new Task(async () => await DContext.SA_HistoryHeader.LoadAsync());
Debug.WriteLine("All Tasks Assigned");
task.Start();
task.Wait();
while (!DContext.SA_HistoryHeader.Local.Any())
{
Debug.WriteLine("Task Status " + task.Status);
}
try
{
Debug.WriteLine("We are about to count the records...");
while (DContext.SA_HistoryHeader.Local.Count != 58139)
{
Debug.WriteLine("OrderHistory has " + DContext.SA_HistoryHeader.Local.Count + " Records");
}
}
catch (Exception …Run Code Online (Sandbox Code Playgroud) 参考此问题:如何仅获取最新的发票编号
我接受了使用MAX函数的答案,但Robert McKee指出将导致排序值,例如:
‘A’ ‘AA’ ‘AAA’ ‘AB’ ‘B’
当我需要的是:
‘A’ ‘B’ ‘AA’ ‘AB’ ‘AAA’
我正试图找到一种方法来查找最新版本的发票.引用问题中接受的答案将起到一定作用.它确实满足了我的问题......但现在一个新问题值得回答自己的问题,而不是让我回去修改我原来的问题.所以…
我唯一需要处理的是发票编号本身.发票编号的格式为##### XXX,其中#####是实际的发票编号,XXX是版本编号.XXX可以是从'A'到'ZZZ'的任何地方.
这是我尝试找到一个合理的工作(一个SQL测试用例):
DECLARE @TempTable TABLE (MyNumber int, MyString varchar(15));
INSERT @TempTable
VALUES (100, 'A'), (100, 'AAZ'), (100, 'B'), (100, 'AZ'), (100, 'C'), (100, 'Z'), (100, 'AA'), (100, 'AB');
SELECT TOP 1
RTRIM(CAST(MyNumber AS NVARCHAR(15)) + MyString) AS InvoiceNumber
FROM @TempTable
ORDER BY RIGHT(LEFT(MyString + SPACE(2), 3), 1) DESC, RIGHT(LEFT(MyString + SPACE(2), 2), 1) DESC, LEFT(MyString, 1) DESC;
Run Code Online (Sandbox Code Playgroud)
有人愿意提供更好的答案或指出我正确的方向来清理我的?
提前致谢,
我正在努力学习Autofac。我找不到 Winforms 的工作示例。在我的program.cs我有这个:
public static IContainer Container { get; private set; }
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
private static void Main()
{
var builder = new ContainerBuilder();
builder.Register(c => new MyContext());
Container = builder.Build();
...
using (var loginForm = new LoginForm(new MyContext()))
{
DialogResult results;
do
{
results = loginForm.ShowDialog();
if (results == DialogResult.Cancel)
Environment.Exit(1);
} while (results != DialogResult.OK);
UserName = loginForm.ValidatedUserName;
}
}
Run Code Online (Sandbox Code Playgroud)
MyContext()是一个 DbContext。我想注入MyContext()我的 …
I have a Windows Form with a number of Textboxes. I bind them to a DataSource as the Form Loads.
public partial class FormSettings : Form
{
private readonly DbContext _context = new DbContext();
public FormSettings()
{
InitializeComponent();
}
protected override void OnLoad(EventArgs e)
{
_context.OrderEntrySettings.Load();
SettingsBindingSource.DataSource = _context.OrderEntrySettings.Local.ToBindingList();
Binding saNbinding = new Binding("Text", SettingsBindingSource, "InvoiceNumber");
InvoiceNumberTextBox.DataBindings.Add(saNbinding);
Binding pthNbinding = new Binding("Text", SettingsBindingSource, "SalesOrderExportPath");
PathTextBox.DataBindings.Add(pthNbinding);
<snip>
…
</snip>
}
Run Code Online (Sandbox Code Playgroud)
One of the Textboxes is bound to a Directory Path (string) …
我是一名老程序员,但对 javascript 很陌生。我正在开发一个小型电子商务应用程序。我的产品或项目最多有二十个自定义用户定义的属性。例如,“螺钉”类别有两个自定义属性“长度”和“螺纹”。
我为每个活动的自定义属性动态创建一个组合框过滤器。我添加了一个按钮,单击该按钮时需要将所有动态创建的组合框过滤器重置回“任意”。
如果我的组合框是静态定义的,这就是我试图实现的基本思想:
import React from 'react';
import Combobox from "react-widgets/Combobox";
class Sample extends React.Component {
constructor() {
super();
this.combo1 = React.createRef();
this.combo2 = React.createRef();
}
render() {
let buttonClick = () => {
this.combo1.current.value = "Any";
this.combo2.current.value = "Any";
}
return (
<div>
<button onClick={() => buttonClick() }>Reset Filters</button>
<Combobox data={["Any", "1 1/2", "1 1/4"]} ref={this.combo1} />
<Combobox data={["Any", "Red", "Green", "Blue"]} ref={this.combo2} />
</div>
);
}
}
export default Sample;
Run Code Online (Sandbox Code Playgroud)
如何定义ref动态创建的组合框?
我的组件的相关部分:
...
<p …Run Code Online (Sandbox Code Playgroud) 我有一个简单的测试Windows窗体应用程序.我第一次在VS中运行它一切正常.如果我再次立即运行它会在adapter.fill(ds)上抛出有关读保护内存的异常; 线.如果我等待5分钟左右,应用程序将再次运行.我想从stackoverflow社区获得一些关于我被愚弄的建议.我想这是一些连接超时.代码如下:
C#
public void Button1_Click(object sender, EventArgs e)
{
string connectionString = @"Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=x:\CMSBak\ISP;";
var conn = new OdbcConnection(connectionString);
conn.Open(); // Open the connection
string strQuery = "SELECT * FROM ISPINMAS";
var adapter = new OdbcDataAdapter(strQuery, conn);
var ds = new DataSet();
try
{
adapter.Fill(ds);
}
catch (Exception)
{
conn.Close();
throw;
}
DataTable dt = ds.Tables[0];
dataGridView1.DataSource = dt.DefaultView;
conn.Close(); // That's it, now close the connection
}
Run Code Online (Sandbox Code Playgroud) 作为开发人员,如果不更改引用所指向的参数类型参数,则使用ref关键字将该参数传递给方法,我会获得什么?
我已经读过两个,带有引用类型参数的ref关键字和C#中引用类型变量的"ref"有什么用?和其他一些人.我知道这个问题已经被问过很多次了.我相信我在问一个独特的问题.如果你认识其他的wize,请随时记下我的问题.
简单的课程:
public class Person
{
public Person(string first, string last)
{
FirstName = first;
LastName = last;
}
public string FirstName { get; set; }
public string LastName { get; set; }
public override string ToString()
{
return string.Format("{0} {1}", FirstName, LastName);
}
}
Run Code Online (Sandbox Code Playgroud)
使用关键字'ref'传递表单:
public partial class Form2 : Form
{
private Person _person;
public Form2()
{
_person = new Person("John", "Doe");
InitializeComponent();
}
protected override void …Run Code Online (Sandbox Code Playgroud) 我需要一个char*我的文件名.它应该是这样的:cards/h11.bmp
我有一个函数,我从各种SO文章拼凑而成:
char* getFileName(int* pc1_no, char* suite)
{
int number;
char pCard1[80];
strcpy_s(pCard1, "cards/");
strcat_s(pCard1, suite);
number = *pc1_no;
cout << number << endl;
string str = to_string(number);
char const *pchar = str.c_str();
strcat_s(pCard1, pchar);
strcat_s(pCard1, ".bmp");
return pCard1;
}
Run Code Online (Sandbox Code Playgroud)
当然,返回垃圾.我没有得到指针值.我很确定我用指针犯了一个愚蠢的错误.提前致谢.
c# ×9
winforms ×4
.net ×1
android ×1
asp.net-core ×1
async-await ×1
autofac ×1
c++ ×1
data-binding ×1
dbase ×1
enumeration ×1
javascript ×1
jwt ×1
odbc ×1
reactjs ×1
ref ×1
reference ×1
soft-delete ×1
sorting ×1
sql ×1
sql-order-by ×1
textbox ×1
xamarin ×1