You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将LogicaLog类中DataTable绑定到DataGridView时为空如何解决

问题原因

  • 你在TablasLog窗体中实例化的LogicaLog对象r,从未执行过crear_trigger方法:tbl_tablas仅在crear_trigger方法运行时才会被数据库查询结果赋值,未调用该方法时这个成员变量默认值就是null。
  • 如果你之前在其他业务逻辑中已经调用过crear_trigger方法赋值了tbl_tablas,本质是你使用了另一个LogicaLog类的实例,不同实例的非静态成员变量数据互相独立,新实例的tbl_tablas自然还是未赋值的状态。

解决方法

方案1:独立封装tbl_tablas的加载逻辑(推荐)

原crear_trigger方法还包含创建触发器的业务逻辑,直接调用会额外执行不需要的操作,你可以把查询tblTablaLog的逻辑单独抽出来作为LogicaLog的公共方法:

// 在LogicaLog类中添加如下方法
public void CargarTablasLog()
{
    tbl_tablas = Traer_informacion("SELECT TABLE_NAME,Activo FROM tblTablaLog WHERE Activo = 'True' ", set_getcadena_orginen);
}

然后在TablasLog窗体的Load事件中先调用这个方法再绑定数据源:

private void TablasLog_Load(object sender, EventArgs e)
{
    r.CargarTablasLog(); // 先加载数据
    dataGridView1.AutoGenerateColumns = true;
    dataGridView1.DataSource = r.tbl_tablas;
}

方案2:复用已经实例化过的LogicaLog对象

如果你是在其他窗口先执行了crear_trigger方法,再打开TablasLog窗口,可以把已经赋值过的LogicaLog实例通过构造函数传递给TablasLog窗口,避免重复实例化:

// 修改TablasLog的构造函数
public partial class TablasLog : Form
{
    LogicaLog r;
    // 接收外部传入的已经赋值的LogicaLog实例
    public TablasLog(LogicaLog logicaInstancia)
    {
        InitializeComponent();       
        r = logicaInstancia;
    }

    private void TablasLog_Load(object sender, EventArgs e)
    {
        dataGridView1.AutoGenerateColumns = true;
        dataGridView1.DataSource = r.tbl_tablas;
    }
}

打开TablasLog窗口的位置传入已有的实例即可:

// 假设你之前的LogicaLog实例名为logicaExistente
TablasLog form = new TablasLog(logicaExistente);
form.Show();

方案3:临时测试方案

如果只是临时测试不需要优化逻辑,也可以直接调用crear_trigger方法,注意需要传入当前窗体作为参数:

private void TablasLog_Load(object sender, EventArgs e)
{
    r.crear_trigger(this); // 调用方法赋值tbl_tablas
    dataGridView1.AutoGenerateColumns = true;
    dataGridView1.DataSource = r.tbl_tablas;
}

注意:该方案会执行创建触发器的全部逻辑,仅适合测试场景使用,生产环境建议使用方案1


内容的提问来源于stack exchange,提问作者Esteban Giraldo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 13:42:02