向C#dataGridView中添加数据,不用数据库,急急!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了向C#dataGridView中添加数据,不用数据库,急急!相关的知识,希望对你有一定的参考价值。

用添加按扭向C#dataGridView中添加数据,点击按扭,将textbox中的数据放到dataGridView的相对应的列下,并建新行以便后来的数据继续添加。
不需要用数据库,这个该怎么做啊?
DataTable dt = new DataTable();
DataRow dr=dt.NewRow();
dr["拼音码"] = Column6;
dt.Rows.Add(dr);
dataGridView1.DataSource=dt;

编译没错,运行时候,他说dr["拼音码"] = Column6;设置问题。

首先,dataGridView是双向绑定到一个DADASET或其他的数据集
在DATASET中对数据进行删除修改添加都会在dataGridView中反映出来
因此只要自己创建一个人dataset在手动给他填写数据,这样就不用数据库了
参考技术A 建议放datatable放入viewstate,再对viewstate进行添删改等操作。

对于你补充里的问题:
向datatable里添加一行,不用那么费事,来个简单的直接用数组就行了。
比如你的datatable里有三列
string[] a="列一","列二","列三";
dt.Rows.Add(a);本回答被提问者采纳

向 100K+ 数据集添加行

【中文标题】向 100K+ 数据集添加行【英文标题】:Adding rows to a 100K+ dataset 【发布时间】:2020-02-09 08:01:26 【问题描述】:

我对 Python 和数据科学真的很陌生。

我有一个包含 30 列的 100K+ CSV 数据集。目标是在满足某些条件时向数据集添加一些行。

为了方便起见,假设我只有三个名为“A”、“B”和“C”的列,A 和 B 的类型是整数。 C 是一个字符串。

我们不用担心 B 和 C,因为我会把所有 B 列的值都设置为 0,然后我会计算 C。

下面是我的“虚构”数据集的快速视图:

   A
 _____
|  1  |
|  4  |
|  3  |
|  7  |
_______

我在 Dataframe 中解析了我的数据集,并按“A”的值对其进行了排序。

所以,现在,它看起来像这样:

   A
 _____
|  1  |
|  3  |
|  4  |
|  7  |
_______

现在,我想遍历我的 DataFrame 并检查我是否在两行之间缺少一些数字并将它们添加到数据框中,即:如果 A[i+1]-A[i]>1,我想添加 A [i]+1 之间。

   A
 _____
|  1  |
|  2  |
|  3  |
|  4  |
|  5  |
|  6  |
|  7  |
_______

据我所知,我有以下选择:

    将我的新行直接附加到新数据框。我不知道为什么 但我认为这不是一个好主意。如果我是对的,你们可以 解释为什么 ?如果我错了,你们能解释一下原因吗? 将我的新行附加到一个列表中,从该列表中创建一个 DataFrame,然后将我的旧 DataFrame 与我的新数据“加入”。 Idk,有什么建议吗?

我现在的主要问题是,处理大型 DataFrame 很麻烦,而且我的脚本需要很长时间才能完成这项工作。你们能引导我找到处理如此大量数据的“正确方法”吗?

顺便说一句,这是我为选择 n°2 制作的代码:

df=pd.read_csv("dataset.csv")
df.sort_values(by="A")
L=[]
for i in range (0, len(df)-1):
    actual=df.at[i, 'A']
    next=df.at[(i+1), 'A']
    diff=actual-next-1
    for j in range(1, diff):
        L.append(actual+1)
        actual +=1
df=pd.DataFrame(data=L, columns=list(df))
df.to_csv("my_output.csv", sep=',')

【问题讨论】:

其他列应该如何处理? @WillemVanOnsem 我只是要把 int 列的它们归零,我有一个分类列,我稍后会计算,很好的评论,我会在我的帖子中指定这个,谢谢 【参考方案1】:

reindex

'A' 设置为索引,reindex 将为我们指定的每个值创建一行,通过range 完成。所有其他列的缺失单元格是(分别为浮点数和对象)。 reindex之前不需要排序。

df = pd.DataFrame('A': [4, 3, 1, 7], 
                   'B': [10, 11, 12, 13], 
                   'C': ['B1', 'B2', 'B3', 'B4'],
                   'D': [True, False, True, True])

idx = range(df.A.min(), df.A.max()+1)  # All 'A' values you want to represent
df.set_index('A').reindex(idx).reset_index()
#   A     B    C      D
#0  1  12.0   B3   True
#1  2   NaN  NaN    NaN
#2  3  11.0   B2  False
#3  4  10.0   B1   True
#4  5   NaN  NaN    NaN
#5  6   NaN  NaN    NaN
#6  7  13.0   B4   True

如果'A' 是重复的,那么我们需要一个outer 连接来完成相同的操作。

(df.set_index('A')
   .join(pd.DataFrame(index=pd.Index(idx, name='A')), how='outer')
   .reset_index())

【讨论】:

如果“A”是一个日期时间,我们可以使用同样的东西吗? @lefragan 是的。如果它是 datetime dtype,那么您可以设置索引并使用 DataFrame.resample 假设您想要一个常规频率。同样,您可以使用pd.date_range 创建时间列表并重新索引,就像上面一样。 B 列用零填充,C 列用空字符串填充,有没有快速的方法来实现这一点? @lefragan 如果您想保留原始数据并仅填充缺失值,您可以添加.fillna('B': 0, 'C': '')。如果您想覆盖所有值,请添加:.assign(**'B': 0, 'C': '')。如果是后者,如果您不需要来自其他列的信息并且只需要 A 值的范围,您几乎可能只想从头开始重建 DataFrame。类似pd.DataFrame('A': idx, 'B': 0, 'C': '')【参考方案2】:

让我们重新创建您的 DataFrame 并通过 A 对其进行索引:

rows = [1, 4, 3, 7]
df = pd.DataFrame("A": rows, "B": [1] * len(rows), "C": ["string"] * len(rows))
N = df.A.max()
df = df.set_index("A")

一种选择是创建一个新的DataFrame,其中填充A 的所有可能条目,并在B 中填充零:

complete_df = pd.DataFrame("A": range(1, N + 1), "B": [0] * N)
complete_df = complete_df.set_index("A")

现在您可以使用df 中的值进行更新并删除A 上的索引:

complete_df = df.combine_first(complete_df)
complete_df = complete_df.reset_index()

这样,您将保留所有列,在 B 列中为所有新行添加零,并在所有其他列中使用 NaN

【讨论】:

以上是关于向C#dataGridView中添加数据,不用数据库,急急!的主要内容,如果未能解决你的问题,请参考以下文章

C#Winform中DataGridView往某一行新增数据

.NET winForm怎么向datagridview中一条一条的添加数据?

如何把dataGridView中的内容向数据库中插入数据

C#中怎样将dataGridView中的新添加的一行数据添加到数据库中

如何向datagridview添加行

C# winform程序中如何向datagridview中添加一行