这么一个功能:
1.订单表:
2.订单明细表:
其中订单明细表包含订单明细附件。
所以拟出
3.订单明细附件表
现要在VS2003中实现,
在订单明细的DataGrid(gridMain)中嵌套明细附件DataGrid(gridDetail)
其中gridMain中一模板列中嵌套DataGrid(gridDetail),其下放一Input,及一按钮用于上传附件,并绑定附件列表到gridDetail<input type="file" runat="server" id="inputFile" size="15">
<asp:Button CommandName="UPFILE" Runat="server" ID="btnUpFile" Text="上传" Width="40px" CausesValidation="false"></asp:Button>现在问题来了。
1.当我上传附件的时候,如何给gridDetail绑定因为取gridDetail.DataSource是null值。
2.在我保存订单时,理应先插订单表产生ID,再保存订单明细表,最后保存各明细的附件记录。请教应该如何做?
我的想法是
先保存订单,产生了ID后,遍历gridMain各行插入订单明细(取得明细ID),在插入订单明细时,再遍历gridDetail各行,插入明细附件记录。然后,取gridDetail的DataSource是null...
请教各位高手,有何高招?
另:项目较为紧急如有代码贴出,不甚感激。
1.订单表:
2.订单明细表:
其中订单明细表包含订单明细附件。
所以拟出
3.订单明细附件表
现要在VS2003中实现,
在订单明细的DataGrid(gridMain)中嵌套明细附件DataGrid(gridDetail)
其中gridMain中一模板列中嵌套DataGrid(gridDetail),其下放一Input,及一按钮用于上传附件,并绑定附件列表到gridDetail<input type="file" runat="server" id="inputFile" size="15">
<asp:Button CommandName="UPFILE" Runat="server" ID="btnUpFile" Text="上传" Width="40px" CausesValidation="false"></asp:Button>现在问题来了。
1.当我上传附件的时候,如何给gridDetail绑定因为取gridDetail.DataSource是null值。
2.在我保存订单时,理应先插订单表产生ID,再保存订单明细表,最后保存各明细的附件记录。请教应该如何做?
我的想法是
先保存订单,产生了ID后,遍历gridMain各行插入订单明细(取得明细ID),在插入订单明细时,再遍历gridDetail各行,插入明细附件记录。然后,取gridDetail的DataSource是null...
请教各位高手,有何高招?
另:项目较为紧急如有代码贴出,不甚感激。
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>DataListNesting</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:DataList ID="DataList1" runat="server" OnItemDataBound="DataList1_ItemDataBound" DataSourceID="SqlDataSource1">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("OrderID") %>'></asp:Label>
<asp:Label ID="Label2" runat="server" Text='<%# Eval("CustomerID") %>'></asp:Label>
<asp:DataList ID="DataList2" runat="server" DataSourceID="SqlDataSource2">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("ProductID") %>'></asp:Label>
<asp:Label ID="Label2" runat="server" Text='<%# Eval("UnitPrice") %>'></asp:Label>
<asp:Label ID="Label3" runat="server" Text='<%# Eval("Quantity") %>'></asp:Label>
</ItemTemplate>
</asp:DataList>
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="server=.;database=Northwind;uid=sa;pwd=sa" ProviderName="System.Data.SqlClient" SelectCommand="select ProductID, UnitPrice, Quantity from [Order Details] where orderID = @orderID">
<SelectParameters>
<asp:Parameter Name="orderID" />
</SelectParameters>
</asp:SqlDataSource>
</ItemTemplate>
</asp:DataList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="server=.;database=Northwind;uid=sa;pwd=sa" ProviderName="System.Data.SqlClient" SelectCommand="select OrderID, CustomerID from Orders"></asp:SqlDataSource>
</div>
</form>
</body>
</html>
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{ }
protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
{
SqlDataSource sqlDataSource2;
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
sqlDataSource2 = e.Item.FindControl("SqlDataSource2") as SqlDataSource;
if (sqlDataSource2 != null)
{
sqlDataSource2.SelectParameters["orderID"].DefaultValue = (e.Item.DataItem as DataRowView)["orderID"].ToString();
}
}
}
}
==
上传附件后重新绑定gridMain那么gridDetail自然会绑定,绑定内部gridDetail的方法可以参考下面的案例(http://blog.csdn.net/amandag/archive/2008/06/11/2537344.aspx 案例是DataList的,但思想一样)
2.在我保存订单时,理应先插订单表产生ID,再保存订单明细表,最后保存各明细的附件记录。请教应该如何做?
==
使用事务,先插入从表再插入主表
<EditItemTemplate>
<INPUT id= "File1 " type= "file " name= "File1 " runat= "server ">
</EditItemTemplate>
遍历取值System.Web.UI.HtmlControls.HtmlInputFile tmp = e.Item.Cells[i].FindControl( "File1 ") as System.Web.UI.HtmlControls.HtmlInputFile;
string filePath = tmp.PostedFile.FileName;
上面各位首先都是说到了子DataGrid数据源绑定的解决方法,这个其实没有多大问题,
在ItemDataBound事件里,可以处理,
但是关键是上传附件时,如何将这个附件的DataTable保存住?
因为这时候数据还没插入到数据库中,再新增一附件时,如何取到?难道用动态变量的ViewState来保存?