如何将WinForm用户控件巧妙改写为长尾?

2026-03-30 15:091阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计730个文字,预计阅读时间需要3分钟。

如何将WinForm用户控件巧妙改写为长尾?

Winform API提供了一种数据绑定模式,在示例中,为了方便,开发了两个用于后台API接口的示例控件,并将它们封装成独立控件,以便多次使用。注意:此实例仅为演示,非生产使用。

  winform+api是一种对接数据模式,在本例中,为了方便,开发两个天生具有与后台api对接的用例控件,并且把他们封闭成单独控件,以供多次使用。

  提示:此实例不是生产使用,仅作演示,有不完善地方,重点关注流程和自定义控件。

  本例为API Server,用户控件项目,使用控件项目。

  API Server端:

  api端主要是根据提交上来的请求,组装成一个sql,查询一个内存sqlite数据库(请注意这里没有做sql注入处理)

using Dapper;
using Microsoft.Data.Sqlite;
using System.Data;
using System.Data.Common;
using System.Net;
using System.Text;
using System.Text.Encodings.Web;
using System.Text.Unicode;
using System.Web;

var builder = WebApplication.CreateBuilder(args);

var connection = new SqliteConnection("Data Source=InMemorySample;Mode=Memory;Cache=Shared");

await InitDataAsync();
async Task InitDataAsync()
{
await connection.OpenAsync();
await connection.ExecuteAsync("create table type(ID INTEGER primary key,Name text,Category INTEGER);");
await connection.ExecuteAsync("insert into main.type(ID,Name,Category) values(1,'AliPay',1),(2,'MiroPay',1),(3,'PayPay',2);");
await connection.ExecuteAsync("create table [order](ID INTEGER primary key,Name text,Price real,Quantity integer);");
await connection.ExecuteAsync("insert into [order](ID,Name,Price,Quantity) values(1,'产品A',21.15,12),(2,'产品B',32.45,23),(3,'产品C',43.45,23);");
}
builder.Services.AddSingleton<IDbConnection>(connection);
builder.Services.AddResponseCaching();
builder.Services.AddSingleton<IParameService, ParameService>();

var app = builder.Build();

app.UseResponseCaching();
app.Use(async (context, next) =>
{
context.Response.GetTypedHeaders().CacheControl =
new Microsoft.Net.Http.Headers.CacheControlHeaderValue()
{
Public = true,
MaxAge = TimeSpan.FromHours(1)
};
context.Response.Headers[Microsoft.Net.Http.Headers.HeaderNames.Vary] =
new string[] { "Accept-Encoding" };
await next();
});

app.MapGet("/parame/{dataSource}", async (IParameService parameService, string dataSource, string fields, string conditions) =>
{
var list = await parameService.GetParamesAsync(dataSource, fields, conditions);
return TypedResults.Json(list, new System.Text.Json.JsonSerializerOptions { PropertyNameCaseInsensitive = false });
});
app.Run();

public interface IParameService
{
Task<IEnumerable<dynamic>> GetParamesAsync(string dataSource, string fields, string conditions);
}
public class ParameService : IParameService
{
private readonly ILogger<ParameService> _logger;
private readonly IDbConnection _db;
public ParameService(ILogger<ParameService> logger, IDbConnection db)
{
_logger = logger;
_db = db;
}
public async Task<IEnumerable<dynamic>> GetParamesAsync(string dataSource, string fields, string conditions)
{
var sql = $"select {fields} from [{dataSource}]";
if (conditions != null && conditions.Length > 0)
{
var whereBuilder = new StringBuilder(" where ");
var conditionArr = conditions.Split(new string[] { "(", "),(", ")" }, StringSplitOptions.RemoveEmptyEntries);
foreach (var condition in conditionArr)
{
var arr = condition.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
whereBuilder.Append($" {arr[0]} {arr[1]} '{arr[2]}' and");
}
sql += whereBuilder.ToString().Substring(0, whereBuilder.Length - 3);
}
_logger.LogInformation(sql);
return await _db.QueryAsync<dynamic>(sql);
}
}

  用户控件端:

如何将WinForm用户控件巧妙改写为长尾?

  用户控件有一个公共部分,分别处理两类控件ListControl和DataGridView控件,思路都是从控件上拿到相应的属性数据,然后组装www.558idc.com/japzq.html处的文章,转载请说明出处】

本文共计730个文字,预计阅读时间需要3分钟。

如何将WinForm用户控件巧妙改写为长尾?

Winform API提供了一种数据绑定模式,在示例中,为了方便,开发了两个用于后台API接口的示例控件,并将它们封装成独立控件,以便多次使用。注意:此实例仅为演示,非生产使用。

  winform+api是一种对接数据模式,在本例中,为了方便,开发两个天生具有与后台api对接的用例控件,并且把他们封闭成单独控件,以供多次使用。

  提示:此实例不是生产使用,仅作演示,有不完善地方,重点关注流程和自定义控件。

  本例为API Server,用户控件项目,使用控件项目。

  API Server端:

  api端主要是根据提交上来的请求,组装成一个sql,查询一个内存sqlite数据库(请注意这里没有做sql注入处理)

using Dapper;
using Microsoft.Data.Sqlite;
using System.Data;
using System.Data.Common;
using System.Net;
using System.Text;
using System.Text.Encodings.Web;
using System.Text.Unicode;
using System.Web;

var builder = WebApplication.CreateBuilder(args);

var connection = new SqliteConnection("Data Source=InMemorySample;Mode=Memory;Cache=Shared");

await InitDataAsync();
async Task InitDataAsync()
{
await connection.OpenAsync();
await connection.ExecuteAsync("create table type(ID INTEGER primary key,Name text,Category INTEGER);");
await connection.ExecuteAsync("insert into main.type(ID,Name,Category) values(1,'AliPay',1),(2,'MiroPay',1),(3,'PayPay',2);");
await connection.ExecuteAsync("create table [order](ID INTEGER primary key,Name text,Price real,Quantity integer);");
await connection.ExecuteAsync("insert into [order](ID,Name,Price,Quantity) values(1,'产品A',21.15,12),(2,'产品B',32.45,23),(3,'产品C',43.45,23);");
}
builder.Services.AddSingleton<IDbConnection>(connection);
builder.Services.AddResponseCaching();
builder.Services.AddSingleton<IParameService, ParameService>();

var app = builder.Build();

app.UseResponseCaching();
app.Use(async (context, next) =>
{
context.Response.GetTypedHeaders().CacheControl =
new Microsoft.Net.Http.Headers.CacheControlHeaderValue()
{
Public = true,
MaxAge = TimeSpan.FromHours(1)
};
context.Response.Headers[Microsoft.Net.Http.Headers.HeaderNames.Vary] =
new string[] { "Accept-Encoding" };
await next();
});

app.MapGet("/parame/{dataSource}", async (IParameService parameService, string dataSource, string fields, string conditions) =>
{
var list = await parameService.GetParamesAsync(dataSource, fields, conditions);
return TypedResults.Json(list, new System.Text.Json.JsonSerializerOptions { PropertyNameCaseInsensitive = false });
});
app.Run();

public interface IParameService
{
Task<IEnumerable<dynamic>> GetParamesAsync(string dataSource, string fields, string conditions);
}
public class ParameService : IParameService
{
private readonly ILogger<ParameService> _logger;
private readonly IDbConnection _db;
public ParameService(ILogger<ParameService> logger, IDbConnection db)
{
_logger = logger;
_db = db;
}
public async Task<IEnumerable<dynamic>> GetParamesAsync(string dataSource, string fields, string conditions)
{
var sql = $"select {fields} from [{dataSource}]";
if (conditions != null && conditions.Length > 0)
{
var whereBuilder = new StringBuilder(" where ");
var conditionArr = conditions.Split(new string[] { "(", "),(", ")" }, StringSplitOptions.RemoveEmptyEntries);
foreach (var condition in conditionArr)
{
var arr = condition.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
whereBuilder.Append($" {arr[0]} {arr[1]} '{arr[2]}' and");
}
sql += whereBuilder.ToString().Substring(0, whereBuilder.Length - 3);
}
_logger.LogInformation(sql);
return await _db.QueryAsync<dynamic>(sql);
}
}

  用户控件端:

如何将WinForm用户控件巧妙改写为长尾?

  用户控件有一个公共部分,分别处理两类控件ListControl和DataGridView控件,思路都是从控件上拿到相应的属性数据,然后组装www.558idc.com/japzq.html处的文章,转载请说明出处】