Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在DataGridView中存储临时数据_C#_.net_Winforms - Fatal编程技术网

C# 在DataGridView中存储临时数据

C# 在DataGridView中存储临时数据,c#,.net,winforms,C#,.net,Winforms,例如,我有一个类(用户)和30个值(属性),其中10个在DataGridView中显示为列,但其他(每个用户的设置(发出请求的超时,例如,任何其他BL值))大约20个值,我只想一起存储在XML文件中(我可以进行序列化/反序列化) 因此,我需要将其存储在未显示20个值的任何位置,这方面的最佳做法是什么? 它是DataGridView中的隐藏列还是其他内容 正如我所理解的,我必须把它存储在一起,但我能在哪里做呢?我是否应该在两个存储数据块(用户[10个值]+用户[20个值])之间建立关系,以使它们在

例如,我有一个类(用户)和30个值(属性),其中10个在DataGridView中显示为列,但其他(每个用户的设置(发出请求的超时,例如,任何其他BL值))大约20个值,我只想一起存储在XML文件中(我可以进行序列化/反序列化)

因此,我需要将其存储在未显示20个值的任何位置,这方面的最佳做法是什么? 它是DataGridView中的隐藏列还是其他内容


正如我所理解的,我必须把它存储在一起,但我能在哪里做呢?我是否应该在两个存储数据块(用户[10个值]+用户[20个值])之间建立关系,以使它们在XML中序列化?

使用数据缓存将有助于您的场景

总结:

数据缓存是将数据存储在内存中以便快速访问。通常,获取成本较高(就性能而言)的信息存储在缓存中。在Web应用程序环境中,存储在缓存中的一个更常见的项通常显示为数据库值;通过缓存这些信息,而不是依赖重复的数据库调用,减少了对Web服务器和数据库服务器系统资源的需求,提高了Web应用程序的可伸缩性。正如微软雄辩地指出的

“缓存是计算中广泛使用的一种技术,用于提高 通过将频繁访问或昂贵的数据保留在 在Web应用程序的上下文中,缓存用于保留 跨HTTP请求访问页面或数据,并在不产生任何费用的情况下重用它们 重新创造它们。”

请参考如何在asp.net中使用数据缓存的链接

更新:

如果您没有数据库,并且您使用的是winforms,则将其存储到列表中,并使用linq查询建立关系

下面的链接将展示如何使用联接和LINQ


我经常使用的最佳实践是检索集合中的所有数据,如
列表、DataTable、EntityCollection,
或任何
IEnumerable
类型,并将其绑定到具有
AutoGenerateColumns=false
DataGridView
。在这种情况下,您应该在designer或code中手动将特定列添加到
DataGridView
。代码方法如下所示:

// say this is your User class with 9 fields
public class User
{
    public string Name { get; set; }
    public string LastName { get; set; }
    public string FatherName { get; set; }
    public string Telephone { get; set; }
    public string Mobile { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }
    public bool IsActive { get; set; }
    public DateTime LastLoginDate { get; set; }
}
// and your Form1 class would be like this
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        dataGridView1.AutoGenerateColumns = false;
        // say you want to show, only the first 5 fields of your Entity
        dataGridView1.Columns.Add(new DataGridViewTextBoxColumn { HeaderText = "Name", DataPropertyName = "Name", Width=100 });
        dataGridView1.Columns.Add(new DataGridViewTextBoxColumn { HeaderText = "Last Name", DataPropertyName = "LastName", Width = 100 });
        dataGridView1.Columns.Add(new DataGridViewTextBoxColumn { HeaderText = "Father's Name", DataPropertyName = "FatherName" });
        dataGridView1.Columns.Add(new DataGridViewTextBoxColumn { HeaderText = "Telephone", DataPropertyName = "Tel", Width = 50 });
        dataGridView1.Columns.Add(new DataGridViewTextBoxColumn { HeaderText = "Mobile", DataPropertyName = "Mobile", Width = 50 });
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        List<User> list = new List<User>();

        list.Add(new User { Name="aaa", LastName="bbbb", FatherName="ccc", Tel="01111", Mobile="099999" });

        dataGridView1.DataSource = list.ToArray();
    }
}                        
//假设这是包含9个字段的用户类
公共类用户
{
公共字符串名称{get;set;}
公共字符串LastName{get;set;}
公共字符串父名称{get;set;}
公用字符串电话{get;set;}
公共字符串Mobile{get;set;}
公共字符串用户名{get;set;}
公共字符串密码{get;set;}
公共bool IsActive{get;set;}
公共日期时间LastLoginDate{get;set;}
}
//你的一年级课是这样的
公共部分类Form1:Form
{
公共表格1()
{
初始化组件();
dataGridView1.AutoGenerateColumns=false;
//假设您只想显示实体的前5个字段
添加(新的DataGridViewTextBoxColumn{HeaderText=“Name”,DataPropertyName=“Name”,Width=100});
添加(新的DataGridViewTextBoxColumn{HeaderText=“Last Name”,DataPropertyName=“LastName”,Width=100});
添加(新的DataGridViewTextBoxColumn{HeaderText=“父亲的名字”,DataPropertyName=“父亲的名字”});
添加(新的DataGridViewTextBoxColumn{HeaderText=“Telephone”,DataPropertyName=“Tel”,Width=50});
添加(新的DataGridViewTextBoxColumn{HeaderText=“Mobile”,DataPropertyName=“Mobile”,Width=50});
}
私有void Form1\u加载(对象发送方、事件参数e)
{
列表=新列表();
添加(新用户{Name=“aaa”、LastName=“bbbb”、FatherName=“ccc”、Tel=“01111”、Mobile=“099999”});
dataGridView1.DataSource=list.ToArray();
}
}                        

可以将所有内容都放在一个数据表中而不显示它吗?我没有数据表。您建议我以编程方式创建它吗?如果我不使用数据库和基于WinForms的项目,可以吗?正如我在问题中标记的那样?@user1612334:抱歉,我没有注意到这一点。好的,然后您可以将数据存储到数据表中,或者以list@user1612334:为了建立两个用户之间的关系,您可以通过linq概念来实现。什么是“列表的形式”?假设您有类用户。创建类似list lstUser=new list()的列表。。。。然后将所有的值存储在列表中。我担心,当我必须更改某些内容时,在以后的数据收集过程中,使用列表进行同步和工作会很困难,但是thxIf用户随后想要更改DataGridViewRow(例如,右键单击row->edit),我想在对话框中显示所有值(甚至隐藏)-我如何获得此行的其他值?在本例中,我需要在DataGridViewList中的值列表和行之间建立关系,这不是必须的!我知道列表绑定是单向的,不像DataTable。关键是如何显示列的子集。您可以使用任何其他集合…我最大的问题是,如何从GridViewRow中获取实体的其他值(我认为在索引上建立关联太糟糕了)。
dataGridView1.Rows[0]。DataBoundItem作为用户