从类访问 datagridview 中的数据

Posted

技术标签:

【中文标题】从类访问 datagridview 中的数据【英文标题】:Access data in datagridview from a class 【发布时间】:2017-02-03 14:38:31 【问题描述】:

我已经阅读了很多关于这个问题的主题,但我没有找到答案。我对此很陌生,所以请多多包涵。

我正在尝试将值从 datagridview 传递到列表。然后在一个新类中,我想让 som 方法访问该列表。麻烦的是,当我传递 datagridview 时,它会返回没有内容和值的数据,这意味着我无法对它做任何事情。

////TESTING//// 下的代码如我所愿。我创建了一个指定列表的实例,它正确地计算了行数,见截图。

    public List<vertEl> getVertList = new List<vertEl>();

    //Opens the file dialog and assigns file path to Textbox
    OpenFileDialog browseButton = new OpenFileDialog();
    private void browse_Click(object sender, EventArgs e)
    

        browseButton.Filter = "Excel Files |*.xlsx;*.xls;*.xlsm;*.csv";
        if (browseButton.ShowDialog() == DialogResult.OK)
        
            //SOME CODE TO GET DATA FROM EXCEL AND SOME METHODS TO CALCULATE
            //VALUES TO PASS TO THE TAB VERTIKALELEMENTER TAB IN MY DATAGRIDVIEW
            //VERTIKALELEMENTER IS vertElementerDgv IN MY CODE

            ////TESTING////
            GetVertElementasList TEST = new GetVertElementasList();
            getVertList =  TEST.vertList(vertElementerDgv);
            MessageBox.Show(getVertList.Count.ToString());


        
        else return;
    

我现在想在一个单独的类中执行此操作并从该类中调用一个方法来执行相同的操作,但是当我尝试使用下面的代码时,我得到的计数与我在 form1 中的代码(公共部分类 BridgeGeometry)。它返回计数 0。方法 foo() 分配给表单中的按钮 1。

class GetKoord

    public GetVertElementasList getList = new GetVertElementasList();

    BridgGeometry obj = new BridgGeometry();

    public void foo()
    
        var TEST = getList.vertList(obj.vertElementerDgv);
        //var TEST = obj.getVertList;
        MessageBox.Show(TEST.Count.ToString());

    


我也尝试直接从 datagridview 获取值,但是当我从不是 form1/BridgeGeometry 类的类访问它时,其中没有任何内容。

Form - screenshot

【问题讨论】:

【参考方案1】:

您可以运行一个循环并将包含选定行的信息存储到一个公共变量中,如下所示:

            string itemOne = dataGridView1.SelectedRows[0].Cells[1].Value + string.Empty;
            string itemTwo= dataGridView1.SelectedRows[0].Cells[2].Value + string.Empty;
            string itemThree = dgMasterGridBun.SelectedRows[0].Cells[3].Value + string.Empty;

变量

           public var varItemOne = itemOne;
           public var varItemTwo = itemTwo;
           public var varItemThree = itemThree;

【讨论】:

请用这段代码解释它如何帮助我从外部类访问我的datagridview?问题不在于存储值 - 它是在另一个类中访问它。 只是一个理论,但如果您可以从数据网格视图中提取信息并将其存储为公共变量,您应该能够访问它(我假设使用 getter 和 setter)。我宁愿只是发表评论和头脑风暴,但需要 50 个代表发表评论,哈哈 或者可能将信息存储在 XML 中检查一下,可能会让你的大脑在滴答作响。 ***.com/questions/26040165/… 认为这可能会使事情过于复杂【参考方案2】:

根据我设法让它工作的链接。可能不是最好的解决方案,而是一个可行的解决方案。我试图围绕数据绑定、列表绑定等进行思考,但是由于具有输入值的类是一个混乱的类,所以我现在放弃了。 datagriview 输入值有一些来自列表,一些来自其他 datagridview。

MSDN-forum: Accessing Form1 controls from a different class

链接中给出了解释,所以我只提供我在程序中是如何做到的。

如果我的 GetKoord 课程是这样的:

    public class GetKoord
    
    private BridgGeometry bridgeGeometry;

    public GetKoord(BridgGeometry form1)
    
        bridgeGeometry = form1;
    

    public List<vertElementerParam> getListvertElementer(List<vertElementerParam> theList)
    
        //var vertElementerDgv = bridgeGeometry.vertElementerDgv;
        GetVertElementasList getVertElementasList = new GetVertElementasList();
        List<vertElementerParam> MyDgvListList = new List<vertElementerParam>();
        MyDgvListList = getVertElementasList.vertList(bridgeGeometry.vertElementerDgv);

        //MessageBox.Show(MyDgvListList.Count.ToString());

        theList = MyDgvListList;
        return theList;
    

    

然后我可以像这样在Button1_Click中获取列表,查看第一篇文章中的截图:

    public List<vertElementerParam> getVertList = new List<vertElementerParam>();

    private void button1_Click(object sender, EventArgs e)
    
    GetKoord getKoord = new GetKoord(this);
    List<vertElementerParam> testList = new List<vertElementerParam>();

    testList = getKoord.getListvertElementer(getVertList);
    MessageBox.Show(testList.Count.ToString());

    

【讨论】:

以上是关于从类访问 datagridview 中的数据的主要内容,如果未能解决你的问题,请参考以下文章

在为自定义 DataGridViewColumn 设置属性时访问 DataGridView 控件

从类中的串行端口访问 WinForms 控件

datagridview 中的访问数据库中缺少列

如何使 datagridview 实时连接到本地存储在 VB.NET 中的访问数据库?

如何从类函数内部访问对象属性[重复]

从类库访问 Asp.net-core 中的 appsetting.json