首页 > 社交 > 科普中国

WinForm(十一)用户控件

常驻编辑 科普中国 2022-10-02 控件   用户   组合   数据源   属性   条件   名称   项目   数据   产品

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

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

本例为API Server,用户控件项目,使用控件项目。dAP拜客生活常识网

API Server端:dAP拜客生活常识网

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

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(connection);
builder.Services.AddResponseCaching();
builder.Services.AddSingleton();


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> GetParamesAsync(string dataSource, string fields, string conditions);
}
public class ParameService : IParameService
{
    private readonly ILogger _logger;
    private readonly IDbConnection _db;
    public ParameService(ILogger logger, IDbConnection db)
    {
        _logger = logger;
        _db = db;
    }
    public async Task> GetParamesAsync(string dataSource, string fields, string conditions)
    {  
        var sql = #34;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(#34; {arr[0]} {arr[1]} '{arr[2]}' and");
            }
            sql += whereBuilder.ToString().Substring(0, whereBuilder.Length - 3);
        }
        _logger.LogInformation(sql);
        return await _db.QueryAsync(sql);   
    }
}

用户控件端:dAP拜客生活常识网

用户控件有一个公共部分,分别处理两类控件ListControl和DataGridView控件,思路都是从控件上拿到相应的属性数据,然后组装http请求,取回数据,绑定到控件上。dAP拜客生活常识网

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing.Design;
using System.Linq;
using System.Net.Http;
using System.Security.Policy;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
using System.Web;


namespace GSWControls
{
    public static class ControlExpand
    {
        static HttpClient _httpClient = new HttpClient();
        public static async Task DBControlInit(this ListControl control, string url, string dataSourceName, List    

相关阅读:

  • 控件在哪里(电脑下载的控件在什么位置)
  • 控件工具箱在哪里(word开发工具控件属性不能点)
  • 基于OpenCv的人脸识别(Python完整代码)
  • H5数独游戏开发
  • 每日一练之Android
  • 如何在线申请个人信用报告
  • 初普TriPollar:源自医疗研发的家用美容体验,全球超过百
  • 快手是哪里的(快手会主动打电话给用户吗)
  • 移动4g套餐哪个划算(2021移动老用户最划算的套餐)
  • 如何注册微博(海外用户怎么注册微博)
    • 网站地图 |
    • 声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不做权威认证,如若验证其真实性,请咨询相关权威专业人士。