我正在开发WPF应用程序,我想重用我在所有这些应用程序中相同的类,所以我可以添加它们作为参考.
在我的情况下,我有一个我的命令类:
public class RelayCommand : ICommand
{
#region Fields
readonly Action<object> _execute;
readonly Predicate<object> _canExecute;
#endregion // Fields
#region Constructors
public RelayCommand(Action<object> execute)
: this(execute, null)
{
}
public RelayCommand(Action<object> execute, Predicate<object> canExecute)
{
if (execute == null)
throw new ArgumentNullException("execute");
_execute = execute;
_canExecute = canExecute;
}
#endregion // Constructors
#region ICommand Members
public bool CanExecute(object parameter)
{
return _canExecute == null ? true : _canExecute(parameter);
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; } …Run Code Online (Sandbox Code Playgroud) 我想在我的应用程序中显示应用程序版本。我做了一些研究,我试过这个:
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
Version version = assembly.GetName().Version;
_applicationVersion = version.Major + "." + version.Minor + "." + version.Build;
Run Code Online (Sandbox Code Playgroud)
但我的版本变量总是显示 1.0.0.0
当我发布我的应用程序并将其安装在我的计算机上时,它在我的程序列表中显示它的版本是 1.0.1.1。这是我希望我的应用程序显示的数字
有没有人对此有解决方案?
编辑
我的问题是我只是在我的 Visual Studio 项目的属性中设置发布版本。这似乎不是您从我上面发布的代码中获得的应用程序版本。我找到了 AssemblyInfo.cs 文件,它也有 2 个属性:
[assembly: AssemblyVersion("x.x.x.x")]
[assembly: AssemblyFileVersion("x.x.x.x")]
Run Code Online (Sandbox Code Playgroud)
所以这解决了我的第一个问题。
但是这两个版本号有什么区别,为什么要两个不同的版本呢?发布版本代表什么?
应用程序不是总是只有 1 个版本号吗?
我有以下表格。
tbl_groups包含所有当前数据,当名称发生更改时,我会将其存储在历史表中。
CREATE TABLE tbl_groups (
id integer NOT NULL,
name varchar NOT NULL,
active boolean NOT NULL
);
CREATE TABLE tbl_groups_history (
id integer NOT NULL,
group_id integer NOT NULL,
name varchar NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
当活动字段为 false 时,可能不会发生更新。因此,我创建了一个触发器,以便在发生这种情况时抛出异常:
CREATE OR REPLACE FUNCTION fn_group_deny_update_when_inactive() RETURNS TRIGGER AS
$BODY$
BEGIN
IF
OLD.active = false
THEN
RAISE EXCEPTION 'Record is inactive';
END IF;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql;
CREATE TRIGGER 01_group_can_update
BEFORE UPDATE ON tbl_groups
FOR EACH ROW
EXECUTE PROCEDURE …Run Code Online (Sandbox Code Playgroud) 当我ObservableCollection把我DataGrid与我绑在一起AutoGenerateColumns时.我可以双击要编辑的单元格,然后我可以编辑单元格中的文本.
但是当我设置AutoGenerateColumns为false并想要使用自定义时DataGridTextColumns,我也可以双击该单元格.但是那里的文本被删除了所以我有一个空字符串而不是我想要编辑的字符串.
有关这个问题的任何想法?
这是我的DataGrid:
<DataGrid ItemsSource="{Binding Tasks}"
Margin="0,10,30,0"
AutoGenerateColumns="False"
Style="{DynamicResource DataGridStyle}"
HorizontalScrollBarVisibility="Hidden"
SelectedItem="{Binding SelectedTask}">
<DataGrid.Columns>
<DataGridTextColumn>
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="Margin" Value="6,0,0,0" />
<Setter Property="Text" Value="{Binding Description}" />
<Setter Property="VerticalAlignment" Value="Center" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
编辑:
我也注意到当AutoGenerateColumns设置为false时,当我插入新行时,绑定的文本没有设置...当我设置AutoGeneratedColumns为true时,它绑定插入的文本.
我有一个 asp.net MVC razor C# 应用程序,它有 1 个控制器和 1 个接受参数的 POST 函数。该函数返回一个 HttpResponseMessage。
public class VersionController : Controller
{
[HttpPost]
public HttpResponseMessage LatestClientVersion(string myVar)
{
string outputMessage = "This is my output";
...
var resp = new HttpResponseMessage(HttpStatusCode.OK);
resp.Content = new StringContent(outputMessage, Encoding.UTF8, "text/plain");
return resp;
}
}
Run Code Online (Sandbox Code Playgroud)
出于测试目的,我使用 Postman 向 URL 发出 POST 请求。它回应:
StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StringContent, Headers:
{
Content-Type: text/plain; charset=utf-8
}
Run Code Online (Sandbox Code Playgroud)
我的状态码响应良好,但我没有看到我的字符串“这是我的输出”
所以我想也许这与 C# 特定的东西有关,所以我做了一个 C# winforms 应用程序来测试。因此,当我单击按钮时,它会执行以下操作:
public void TestWebRequest()
{ …Run Code Online (Sandbox Code Playgroud) 如果至少一个字段发生了更改,我想跟踪表上的更改并将它们存储在相应的历史记录表中。
我有以下表格:
tbl_employees
CREATE TABLE tbl_employees (
id serial NOT NULL,
first_name character varying NOT NULL,
last_name character varying NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
tbl_employees_history
CREATE TABLE tbl_employees (
id serial NOT NULL,
employee_id NOT NULL,
first_name character varying NOT NULL,
last_name character varying NOT NULL,
changed_on timestamp NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
功能
CREATE OR REPLACE FUNCTION log_employee_changes() RETURNS trigger as
$BODY$
BEGIN
IF (NEW.last_name <> OLD.last_name) or (NEW.first_name <> OLD.first_name) THEN
INSERT INTO tbl_employee_history(employee_id,last_name, first_name,changed_on)
VALUES(OLD.id,OLD.last_name, OLD.first_name,now());
END IF;
RETURN NEW;
END; …Run Code Online (Sandbox Code Playgroud) 我的客户表上有以下触发器,因此我可以跟踪客户名称是否已随时间更改以及名称的先前版本是什么。
CREATE OR REPLACE FUNCTION fn_customer_changes_log_history() RETURNS trigger as
$BODY$
BEGIN
IF (NEW.name <> OLD.name)
THEN
INSERT INTO tbl_customers_history(customer_id, name, action)
VALUES(OLD.id, OLD.name, 'UPDATE');
END IF;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql;
CREATE TRIGGER tr_customer_changes_log_history
BEFORE UPDATE ON tbl_customers
FOR EACH ROW
EXECUTE PROCEDURE fn_customer_changes_log_history();
Run Code Online (Sandbox Code Playgroud)
但是当我在 NEW.name = NULL 和 OLD.name = "Customer 1" 时执行 UPDATE 时,不会触发此触发器?它仅在 NEW.name 此处具有实际字符串值时触发。
这是为什么?NULL 和“客户 1”不相等所以它应该触发?