现在,我有一个表,其主键是一个auto_increment
字段.但是,我需要将主键设置为username
,date
(以确保不能存在具有日期的重复用户名).
auto_increment
但是,我需要该字段才能更改行信息(添加和删除).
通常在这种情况下做什么?
谢谢!
我想创建一个函数来转换任何空值,例如从数据库转换为空字符串.我知道有一些方法,比如if value != null ?? value : String.Empty
是否有办法传递null
给方法,例如
public string nullToString(string? value)
{
if(value == null) return empty;
return value
}
Run Code Online (Sandbox Code Playgroud)
但我不确定参数语法这样做..
我尝试了上面但它说不是可以为空的类型.
提前致谢.
在我的WPF应用程序中,我有时会出现问题System.Windows.MessageBox
.当它最初显示时,它会显示在我的主应用程序窗口的顶部,如我所愿.有没有办法可以强迫它始终保持在主窗口的顶部?我遇到的问题是,当MessageBox
显示a时,用户可以点击主应用程序窗口并将其置于前面,这意味着MessageBox
隐藏在视图之外.在这种情况下,用户可能没有意识到它在那里,或者忘了它,对他们来说,主应用程序似乎已经冻结了.
我已经阅读了很多有关此问题的帖子,但没有人为我解决了这个问题.
我应该补充说,提出的线程MessageBox
可能不是UI线程.谢谢汤姆
我正在尝试创建新线程并传递带参数的方法,但错误输出.
Thread t = new Thread(myMethod);
t.Start(myGrid);
public void myMethod(UltraGrid myGrid)
{
}
Run Code Online (Sandbox Code Playgroud)
--------- ------------错误
错误:CS1502 - 第92行(164) - '
System.Threading.Thread.Thread(System.Threading.ThreadStart)
' 的最佳重载方法匹配包含一些无效参数错误:CS1503 - 第92行(164) - 参数'1':无法从'方法组'转换为'
System.Threading.ThreadStart
'
我在我的一些项目中使用异步方法,我喜欢它,因为它允许我的应用程序更具可伸缩性.但是,我想知道异步方法在后台如何真正起作用?.NET(或Windows?)如何知道呼叫已完成?根据我所做的异步调用的数量,我可以看到创建了新线程(但并不总是......).为什么?
另外,我想监控请求完成的时间.为了测试这个概念,我编写了以下代码,它在启动秒表后立即异步调用Web服务.
for (int i = 0; i < 10000; i++)
{
myWebService.BeginMyMethod(new MyRequest(), result, new AsyncCallback(callback), i);
stopWatches[i].Start();
}
// Call back stop the stopwatch after calling EndMyMethod
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为所有请求(10000)具有相同的开始时间并且持续时间将线性上升(调用0 =持续时间1,调用1 =持续时间2等).如何使用异步方法监控呼叫的实际持续时间(从请求真正执行到结束的那一刻)?
更新:异步方法是否会阻止流程?我知道它使用.NET ThreadPool
但是如何IAsyncResult
知道调用已完成并且是时候调用该CallBack
方法了?
我在绑定 UserControl 中的依赖项属性时遇到问题。当它初始化时,它会得到一个值,但它不会更新。我可能错过了一些明显的东西,这里有一些代码片段:
这是我绑定BalanceContent
依赖属性的地方:
<Game:PlayerDetails x:Name="SelectedPlayerDetails" Grid.Row="1" Grid.Column="2" Grid.ColumnSpan="2" Grid.RowSpan="4"
BalanceContent="{Binding Source={StaticResource UserData}, Path=SelectedUser.Balance, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}">
</Game:PlayerDetails>
Run Code Online (Sandbox Code Playgroud)
这是TextBox
在UserControl
:
<TextBox VerticalAlignment="Center" FontFamily="Formata" FontSize="20" Grid.Column="2"
Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type UserControl}}, Path=BalanceContent}"
Grid.Row="7"></TextBox>
Run Code Online (Sandbox Code Playgroud)
这是依赖属性:
public static readonly DependencyProperty BalanceContentProperty = DependencyProperty.Register(
"BalanceContent", typeof(string), typeof(PlayerDetails));
public string BalanceContent
{
get
{return (string) GetValue(BalanceContentProperty);}
set
{SetValue(BalanceContentProperty, value);}
}
Run Code Online (Sandbox Code Playgroud)
以下是更新所选用户的列表,该列表位于使用 UserControl 的视图中:
<ListView x:Name="lstAccounts" Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="2" Grid.RowSpan="4"
ItemsSource="{Binding Source={StaticResource UserData}, Path=CurrentUserSearch}"
SelectedItem="{Binding Source={StaticResource UserData}, Path=SelectedUser}"
Run Code Online (Sandbox Code Playgroud)
并SelectedUser
在一个实现的类中定义INotifyPropertyChanged
: …
我正在尝试用下拉列表做最简单的事情,但它只是不起作用.我有一个名为的整数属性SearchCriteria.Distance
.这是一个简单的整数属性.我正在尝试将该属性绑定到整数的drowpdown列表,但它不会绑定.价值总是如此0
.这是代码:
@Html.LabelFor(x => x.SearchCriteria.Distance, "Radius (miles)", new { @class="control-label" })
<div class="controls">
@Html.DropDownListFor(x => x.SearchCriteria.Distance, new SelectList(new int[] { 5, 15, 25, 50 }), new { @class="input-small", style="height:36px;"})
</div>
Run Code Online (Sandbox Code Playgroud)
因为它是一个简单的整数列表,所以不要Text
Value
将它与之关联起来.我在这做错了什么?
编辑:原来这个问题是我的一个愚蠢错误的结果.我有一个隐藏的字段,SearchCriteria.Distance
我的表单上的id,我忘了,这阻止了设置下拉值.我将下面的解决方案标记为答案,因为它是正确的.
我需要捕捉当用户按下CTRL-Z
(按下CTRL
并Z
在同一时间)在RichTextBox控制.
我关掉了ShortCutsEnabled
房子.我已经试过各种组合我能想到使用KeyCode
,并KeyData
与KeyDown
和KeyPress
事件.
我可以捕获一个CTRL
或一个Z
,但从不在一起.被RichTextBox
捕获此击键我可以看到它,即使快捷键被禁用?
有没有人有一个适用于此的解决方案?
我有一个名为BackgroundWorker
有一个线程不断运行的类.要关闭此线程,stop
需要命名为的实例变量true
.
为了确保在使用完类时释放线程,我添加IDisposable
了一个调用的终结器Dispose()
.假设stop = true
确实导致此线程退出,这个sippet是否正确?Dispose
从终结器调用是对的,对吧?
终结者应该总是调用,Dispose
如果object
继承IDisposable
,对吧?
/// <summary>
/// Force the background thread to exit.
/// </summary>
public void Dispose()
{
lock (this.locker)
{
this.stop = true;
}
}
~BackgroundWorker()
{
this.Dispose();
}
Run Code Online (Sandbox Code Playgroud) 我有以下代码将以前的值输入DataGridView单元格.如果在第0行和第2列或更大,则向左的val,否则直接在上面的值:
private void dataGridViewPlatypi_CellEnter(object sender, DataGridViewCellEventArgs args)
{
// TODO: Fails if it sees nothing in the previous cell
string prevVal = string.Empty;
if (args.RowIndex > 0)
{
prevVal = dataGridViewPlatypi.Rows[args.RowIndex - 1].Cells[args.ColumnIndex].Value.ToString();
} else if (args.ColumnIndex > 1)
{
prevVal = dataGridViewPlatypi.Rows[args.RowIndex].Cells[args.ColumnIndex-1].Value.ToString();
}
dataGridViewPlatypi.Rows[args.RowIndex].Cells[args.ColumnIndex].Value = prevVal;
}
Run Code Online (Sandbox Code Playgroud)
只要有值可以查看和复制,这就很有用.如果单元格是空白的,我得到:
用户代码未处理System.NullReferenceException
消息=未将对象引用设置为对象的实例.
我猜这是一个使用null coalesce运算符的机会,但(假设我的猜测很好),我该如何实现呢?
c# datagridview nullreferenceexception winforms datagridviewtextboxcell
c# ×8
winforms ×2
wpf ×2
.net-3.5 ×1
.net-4.0 ×1
asp.net ×1
asynchronous ×1
binding ×1
datagridview ×1
disposable ×1
dispose ×1
finalizer ×1
idisposable ×1
messagebox ×1
modal-dialog ×1
mysql ×1
primary-key ×1
richtextbox ×1
xaml ×1