FineUI 官方论坛

标题: Grid的绑定数据取出的问题 [打印本页]

作者: 六脉神剑    时间: 2012-10-30 05:48
标题: Grid的绑定数据取出的问题
本帖最后由 六脉神剑 于 2012-10-30 05:51 编辑

最近刚开始学web开发,为了方便使用了ExtAspNet,碰到一个情况,
有一个页面允许上传多个文件,文件上传后需要用一个列表展示出来,允许上传者删除文件,允许其他人在浏览的时候下载
我决定使用Grid来实现。

<ext:Grid ID="gridFileList" runat="server" AutoScroll="false" Width="300px" Height="150px"Title="附件列表" ShowHeader="false" >    <Columns>      
<ext:BoundField DataField="FileName" HeaderText="文件名" Width="230px" />      
<extinkButtonField HeaderText="删除" Width="60px" CommandName="FileDelete" Text="删除" />       <extinkButtonField HeaderText="下载" Width="60px" CommandName="FileDownload" Text="下载" />   
</Columns>
</ext:Grid>

示例代码:
///示例1protected void gridFileList_RowCommand(object sender, GridCommandEventArgs e)   
{      
if (e.CommandName == "FileDelete")      
//从列表中删除文件        
{            
DataTable dt = gridFileList.DataSource as DataTable;   //直接DataSource进行类型转换            
dt.Rows.RemoveAt(e.RowIndex);            
gridFileList.DataBind();        
}   
}
///示例2
protected void btnUpload_Click(object sender, EventArgs e)   
{        
string fileName = FileUpload1.ShortFileName;        
if (FileUpload1.HasFile)        
{            
string path = "~/upload/" + fileName;           
FileUpload1.SaveAs(Server.MapPath(path));
DataTable dt = CreateTable();           
for (int i = 0; i < gridFileList.Rows.Count; i++)            
{               
GridRow gr = gridFileList.Rows;               
string[] objs = gr.Values;               
string name = objs[0];    //获得第一个值               
DataRow d = dt.NewRow();               
d[0] = name;               
dt.Rows.Add(d);            
}
DataRow dr = dt.NewRow();            
dr["FileName"] = fileName;            
dt.Rows.Add(dr);            
gridFileList.DataSource = dt;            
gridFileList.DataBind();        }        
else        
{            
Alert.Show("上传失败,请检查文件是否存在!");        
}   
}
采用示例1中的方法,我发现尽管Grid中含有数据,我绑定的时候数据源用了一个DataTable, 但是Grid.DataSource为null,使用这个方式无法获得数据,我尝试了在这个页面加了一个成员变量DataTable m_dt,使用如下的代码

if(m_dt==null)
{
m_dt=CreateTable();
}
//上传文件
DataRow dr=m_dt.NewRow();
dr["FileName"]=filename;
m_dt.Rows.Add(dr);
gridFileList.DataSource =m_dt;gridFileList.DataBind();
当上传第一个文件的时候,第一个文件名能够在gridFileList中显示,但是上传第2个文件时,发现列表中只显示了第2个文件名,调试发现,当上传第2个文件的时候,m_dt 为 null,但是在连续2次上传文件中间,并没有做别的操作,也就是说,m_dt应该是包含了一行数据的DataTable

采用 示例2中的方法,使用GridRow.Values的方法来获得,倒是可以取到需要的值,但是这个过于HardCode,不利于代码的读写及维护

有没有比较方便的方式来获取这些已经绑定的数据?









欢迎光临 FineUI 官方论坛 (https://fineui.com/bbs/) Powered by Discuz! X3.4