[系列文章]上传文件管理控件v2
一、引言:
开发v1的时候,遇到很多困难(因为我是新手),于是就上网找了一些资料。
其中,这篇《数据绑定的总结 》文章(http://www.cnblogs.com/qingtianyzl/articles/351012.html)被我看到了,里面有把数组绑定到DataGrid的方法。将里面的一部分代码复制过来,修改一下,就完成了基本的功能。
二、基本原理
dataGrid是asp.net 1.x中用来显示网格式数据的服务器控件,可能通过绑定的方式,把DataTable(数据表)里的内容放置到dataGrid。
那么DataTable是哪来的呢?最基本的来源,是通过连接数据库,打开表获得。(这也是大多数课本上讲的)那么,如果像我这样,所要展示的不是来自于数据库的内容怎么办?我就想到,能不能把数组绑定的dataGrid上呢?在网上找了一些资料,没有结果,却从上面提到的那篇文章里找到了另外的思路:用程序生成一个空的DataTable,再创建Field(在asp.net里叫做列DataColumn),然后把数据填充进去。
晴天,在代码里的注释说得很详细,所以我这里就不我啰嗦了。
三、附源代码
1
<%@ Control Language="C#" ClassName="ListUpload_v2" %>
2
<%@ Import Namespace="System.IO" %>
3
<%@ Import namespace="System.Data" %>
4
5
<script runat="server">
6
/****************************************************************
7
**上传文件管理控件
8
**文件名:ListUpload_v2.ascx
9
**Copyrigth(c) 2008-2010 *************** 柳城别日 xpnew.cnblogs.com
10
**文件编号:
11
**创建人:柳城别日
12
**日期:2008年5月22日
13
**修改人:柳城别日
14
**日期:2008年5月22日
15
* 描述:用来管理上传文件,支持列表、删除
16
**/
17
18
//
19
20
/* class ListUpload2
21
{
22
}
23
*
24
*
25
* */
26
// 类内部初始化
27
private string _strDir = @"~/Upload/";
28
29
30
public string strDir//通过这个属性,可以设置控件所要管理的目录
31
{
32
get
33
{
34
return _strDir;
35
}
36
set
37
{
38
_strDir = value;
39
}
40
}
41
42
protected void Page_Load(object sender, EventArgs e)
43
{
44
if (!Page.IsPostBack)
45
{
46
47
//--------------------------------
48
//下面是从网上找到的代码:
49
50
DataTable dt = new DataTable();
51
//dt为声明一个表
52
53
DataRow dr;
54
//表示Table中行的数据
55
56
dt.Columns.Add(new DataColumn("IntegerValue", typeof(Int32)));
57
dt.Columns.Add(new DataColumn("StringValue", typeof(string)));
58
dt.Columns.Add(new DataColumn("DateTimeValue", typeof(DateTime)));
59
dt.Columns.Add(new DataColumn("BooleanValue", typeof(bool)));
60
//Columns为取值该表列的集合,
61
//Add.为该表添加到列的集合 DataColumn为列框架
62
//后面是列头的标题,后面表示该列的数据类型
63
64
65
66
for (int i = 1; i <= 9; i++)
67
{
68
69
dr = dt.NewRow();
70
//创建与该表具有相同框架新的数据行
71
72
73
dr[0] = i;
74
dr[1] = "Item " + i.ToString();
75
dr[2] = DateTime.Now;
76
dr[3] = (i % 2 != 0) ? true : false;
77
//为数据行添加数值
78
dt.Rows.Add(dr);
79
//把获得数值的指定的行加到该表的集合
80
}
81
82
// dataGrid1.DataSource = new DataView(dt);
83
//把该表作为数据源 放到dataGrid1中
84
// dataGrid1.DataBind();//数据绑定被我注释了
85
86
87
//网上的代码结束
88
//------------------
89
90
//-------------------我自己的代码开始
91
92
DataTable FileList = new DataTable();
93
//FileList为声明一个表
94
95
DataRow FileItem;
96
//表示Table中行的数据
97
98
99
FileList.Columns.Add(new DataColumn("选择", typeof(bool)));
100
FileList.Columns.Add(new DataColumn("文件名", typeof(string)));
101
FileList.Columns.Add(new DataColumn("大小(字节)", typeof(Int32)));
102
FileList.Columns.Add(new DataColumn("上传日期", typeof(DateTime)));
103
//Columns为取值该表列的集合,
104
//Add.为该表添加到列的集合 DataColumn为列框架
105
//前面是列头的标题,后面表示该列的数据类型----这是别人的注释
106
//我认为前面不单单是标题那么简单,在v4里后详细地说明
107
108
109
string dirPath = Server.MapPath(strDir);
110
DirectoryInfo Dir = new DirectoryInfo(dirPath);
111
FileInfo[] arrFiles = Dir.GetFiles();
112
113
foreach (FileInfo f in arrFiles)
114
{
115
FileItem = FileList.NewRow();
116
//创建与该表具有相同框架新的数据行
117
FileItem[0] = false;
118
FileItem[1] = f.Name;
119
FileItem[2] = f.Length;
120
FileItem[3] = f.LastWriteTime;
121
//为数据行添加数值
122
123
FileList.Rows.Add(FileItem);
124
//把获得数值的指定的行加到该表的集合
125
126
}
127
128
dataGrid2.DataSource = new DataView(FileList);
129
//把该表作为数据源 放到dataGrid2中
130
dataGrid2.DataBind();
131
//绑定
132
}
133
134
}
135
136
137
138
</script>
139
140
<asp:DataGrid ID="dataGrid2" runat="server" BorderColor="black" BorderWidth="1" CellPadding="3"
141
CellSpacing="0" GridLines="Both" HeaderStyle-BackColor="#aaaadd" >
142
</asp:DataGrid>
143

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

流浪是注定的宿命;
漂泊是无尽的轮回。
漂泊是无尽的轮回。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了