积极答复者
后台获取gridview模版列控件值问题

问题
-
我在前台gridview模版里放了一个上传控件
<asp:TemplateField HeaderText="图片" SortExpression="Img"> <ItemTemplate> <%# Eval("Img")%> </ItemTemplate> <EditItemTemplate> <asp:HiddenField ID="hdfImg" runat="server" Value='<%# Eval("Img")%>' /> <input type="file" runat="server" id="UpFile" style="width: 132px;" /> </EditItemTemplate> </asp:TemplateField>
我在后台获取这个ID为UpFile的值获取不到,不报错,为空 ,我别的文本框、下拉框都可以获取到
我换成FileUpload控件后台还是获取不到值,这是为什么?string upFile = ((HtmlInputFile)gdvData.Rows[e.RowIndex].FindControl("UpFile")).Value;
我只要是想用gridview自带的编辑实现 图片修改,可是老是获取不到file控件的值
这是我代码问题吗?
答案
-
我完全可以,参考我的简化代码!
[aspx]
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="CSharp.WebForm1" %> <!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></title> </head> <body> <form id="form1" runat="server"> <div> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" onrowediting="GridView1_RowEditing" onrowupdating="GridView1_RowUpdating"> <Columns> <asp:TemplateField HeaderText="图片" SortExpression="Img"> <ItemTemplate> ss </ItemTemplate> <EditItemTemplate> <asp:FileUpload ID="FileUpload1" runat="server" /> </EditItemTemplate> </asp:TemplateField> <asp:CommandField ShowEditButton="True" /> </Columns> </asp:GridView> </div> </form> </body> </html>
[cs]
public partial class WebForm1 : System.Web.UI.Page { private static List<string> files = new List<string> {"a","n" }; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { GridView1.DataSource = files; GridView1.DataBind(); } } protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) { GridView1.EditIndex = e.NewEditIndex; GridView1.DataSource = files; GridView1.DataBind(); } protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) { Response.Write((GridView1.Rows[e.RowIndex].FindControl("FileUpload1")as FileUpload).FileName+"<br/>"); Response.Write((GridView1.Rows[e.RowIndex].FindControl("FileUpload1") as FileUpload).PostedFile.FileName); } }
- 已编辑 ThankfulHeart 2012年7月13日 9:23
- 已标记为答案 笨笨dě活着 2012年7月16日 2:12
-
我是用下列的程序代码来仿真你的状况,可以正确取得到EditTemplate中的hdfImg和UpFile,或许你可以比较一下跟你的程序代码有什么不同,看看对你是否有帮助。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace DemoCSharp { public partial class WebForm5 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) { HiddenField hf = GridView1.Rows[e.RowIndex].FindControl("hdfImg") as HiddenField; if (hf != null) Response.Write(hf.Value + "<br/>"); System.Web.UI.HtmlControls.HtmlInputFile hif = GridView1.Rows[e.RowIndex].FindControl("UpFile") as System.Web.UI.HtmlControls.HtmlInputFile; if (hif != null) Response.Write(hif.Value); } } }
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm5.aspx.cs" Inherits="DemoCSharp.WebForm5" %> <!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></title> </head> <body> <form id="form1" runat="server"> <div> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="RegionID" DataSourceID="SqlDataSource1" onrowupdating="GridView1_RowUpdating"> <Columns> <asp:CommandField ShowEditButton="True" /> <asp:BoundField DataField="RegionID" HeaderText="RegionID" ReadOnly="True" SortExpression="RegionID" /> <asp:BoundField DataField="RegionDescription" HeaderText="RegionDescription" SortExpression="RegionDescription" /> <asp:TemplateField HeaderText="圖片"> <EditItemTemplate> <asp:HiddenField ID="hdfImg" runat="server" Value='<%# Eval("RegionDescription")%>' /> <input type="file" runat="server" id="UpFile" style="width: 132px;" /> </EditItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" SelectCommand="SELECT * FROM [Region]"></asp:SqlDataSource> </div> </form> </body> </html>
以上說明若有錯誤請指教,謝謝。
http://www.dotblogs.com.tw/terrychuang/- 已标记为答案 笨笨dě活着 2012年7月16日 2:13
全部回复
-
我用了,不行的,file和fileupload都不行,但是如果我换成文本框或者下拉框就没问题..
我突然发现一个问题——你的FileUpLoad是在EditTemplate中!
请在RowEdit或者RowUpdating事件中获取它。例如:
protected void TaskGridView_RowEditing(object sender, GridViewEditEventArgs e)
{
FileUpLoad fl = GridView1.Rows[e.NewEditInde].FindControl("Id of FindControl") as FileUpLoad;
//Bind data to the GridView control by resetting the DataSource and call DataBind()
BindData();
} -
我用了,不行的,file和fileupload都不行,但是如果我换成文本框或者下拉框就没问题..
我突然发现一个问题——你的FileUpLoad是在EditTemplate中!
请在RowEdit或者RowUpdating事件中获取它。例如:
protected void TaskGridView_RowEditing(object sender, GridViewEditEventArgs e)
{
FileUpLoad fl = GridView1.Rows[e.NewEditInde].FindControl("Id of FindControl") as FileUpLoad;
//Bind data to the GridView control by resetting the DataSource and call DataBind()
BindData();
}
-
在Row_Updating事件中看看!
protected void TaskGridView_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
FileUpLoad fl = GridView1.Rows[e.RowIndex].FindControl("Id of FindControl") as FileUpLoad;
}
- 已编辑 ThankfulHeart 2012年7月13日 8:56
-
在Row_Updating事件中看看!
protected void TaskGridView_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
FileUpLoad fl = GridView1.Rows[e.RowIndex].FindControl("Id of FindControl") as FileUpLoad;
}
-
我完全可以,参考我的简化代码!
[aspx]
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="CSharp.WebForm1" %> <!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></title> </head> <body> <form id="form1" runat="server"> <div> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" onrowediting="GridView1_RowEditing" onrowupdating="GridView1_RowUpdating"> <Columns> <asp:TemplateField HeaderText="图片" SortExpression="Img"> <ItemTemplate> ss </ItemTemplate> <EditItemTemplate> <asp:FileUpload ID="FileUpload1" runat="server" /> </EditItemTemplate> </asp:TemplateField> <asp:CommandField ShowEditButton="True" /> </Columns> </asp:GridView> </div> </form> </body> </html>
[cs]
public partial class WebForm1 : System.Web.UI.Page { private static List<string> files = new List<string> {"a","n" }; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { GridView1.DataSource = files; GridView1.DataBind(); } } protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) { GridView1.EditIndex = e.NewEditIndex; GridView1.DataSource = files; GridView1.DataBind(); } protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) { Response.Write((GridView1.Rows[e.RowIndex].FindControl("FileUpload1")as FileUpload).FileName+"<br/>"); Response.Write((GridView1.Rows[e.RowIndex].FindControl("FileUpload1") as FileUpload).PostedFile.FileName); } }
- 已编辑 ThankfulHeart 2012年7月13日 9:23
- 已标记为答案 笨笨dě活着 2012年7月16日 2:12
-
我是用下列的程序代码来仿真你的状况,可以正确取得到EditTemplate中的hdfImg和UpFile,或许你可以比较一下跟你的程序代码有什么不同,看看对你是否有帮助。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace DemoCSharp { public partial class WebForm5 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) { HiddenField hf = GridView1.Rows[e.RowIndex].FindControl("hdfImg") as HiddenField; if (hf != null) Response.Write(hf.Value + "<br/>"); System.Web.UI.HtmlControls.HtmlInputFile hif = GridView1.Rows[e.RowIndex].FindControl("UpFile") as System.Web.UI.HtmlControls.HtmlInputFile; if (hif != null) Response.Write(hif.Value); } } }
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm5.aspx.cs" Inherits="DemoCSharp.WebForm5" %> <!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></title> </head> <body> <form id="form1" runat="server"> <div> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="RegionID" DataSourceID="SqlDataSource1" onrowupdating="GridView1_RowUpdating"> <Columns> <asp:CommandField ShowEditButton="True" /> <asp:BoundField DataField="RegionID" HeaderText="RegionID" ReadOnly="True" SortExpression="RegionID" /> <asp:BoundField DataField="RegionDescription" HeaderText="RegionDescription" SortExpression="RegionDescription" /> <asp:TemplateField HeaderText="圖片"> <EditItemTemplate> <asp:HiddenField ID="hdfImg" runat="server" Value='<%# Eval("RegionDescription")%>' /> <input type="file" runat="server" id="UpFile" style="width: 132px;" /> </EditItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" SelectCommand="SELECT * FROM [Region]"></asp:SqlDataSource> </div> </form> </body> </html>
以上說明若有錯誤請指教,謝謝。
http://www.dotblogs.com.tw/terrychuang/- 已标记为答案 笨笨dě活着 2012年7月16日 2:13