DetailView的EidtTemplate下有一个字段用了FileUpload1,但用了FindControl方法却不生效,提示错误为“指定的参数已超出有效值的范围。
参数名: index ”
//编辑
protected void lbtnEdit_Click(object sender, EventArgs e)
{
//Response.Write("lbtnEdit_Click");
FileUpload FileUpload1 = (FileUpload)this.DetailsView1.Rows[0].Cells[4].FindControl("FileUpload1");
//Response.Write("aa");
FileUpload1.Attributes.Add("onpropertychange", "javascript:document.getElementById('Image1').src=document.getElementById('FileUpload1').value");
}lbtnEdit是“编辑”按钮的id,因为DetailView帮定的是GridView的id(主键),所以Rows[0]下标用了0,
对应字段是第5个,所以Cell[4]下标用了4,然后FindControl("FileUpload1")获取控件,但失败了
提示错误就是“指定的参数已超出有效值的范围。
参数名: index ”
请专家看看~
参数名: index ”
//编辑
protected void lbtnEdit_Click(object sender, EventArgs e)
{
//Response.Write("lbtnEdit_Click");
FileUpload FileUpload1 = (FileUpload)this.DetailsView1.Rows[0].Cells[4].FindControl("FileUpload1");
//Response.Write("aa");
FileUpload1.Attributes.Add("onpropertychange", "javascript:document.getElementById('Image1').src=document.getElementById('FileUpload1').value");
}lbtnEdit是“编辑”按钮的id,因为DetailView帮定的是GridView的id(主键),所以Rows[0]下标用了0,
对应字段是第5个,所以Cell[4]下标用了4,然后FindControl("FileUpload1")获取控件,但失败了
提示错误就是“指定的参数已超出有效值的范围。
参数名: index ”
请专家看看~
解决方案 »
- JS的初级问题?
- 求javascript实现浮点数相加 1.00+3.00=4.00
- 请教select from wherre的问题
- 请教树的生成问题?
- showModalDialog打开的窗口中,能不能用鼠标选择静态文本,然后进行COPY的操作?
- 如何上传及下载大小超过100M的文件
- 在infragistics中 webcombo的简单问题
- 关于DataGrid buttoncolumn的问题
- ####SOS#####Datalist无法编辑
- 跟踪 : 异常详细信息: System.Data.SqlClient.SqlException: 用户 'WRONGT\ASPNET' 登
- 我先问一下像qq网站登录效果是怎么实现的
- .net灵活性是要差一些,这个效果怎么做?
Rows[0].Cells[4].FindControl 改成 Rows[0].FindControl 试试。
该了后,提示错误变成了“未将对象引用设置到对象的实例。”
想的是获取了FileUpload1之后,再给FileUpload1添加属性FileUpload1.Attributes.Add("onpropertychange", "javascript:document.getElementById('Image1').src=document.getElementById('FileUpload1').value");
可是现在是FileUpload1.Attributes.Add("onpropertychange", "javascript:document.getElementById('Image1').src=document.getElementById('FileUpload1').value");
是红色提示
可能是哪里的问题呢?
已经一天了,baidu大都这么说,可是我这样就是不对~
看你的 Rows[0].Cells[4] 的控件类型是什么
然后再作判断
<asp:TemplateField HeaderText="图片名称" SortExpression="ImageName">
<EditItemTemplate>
<asp:Image ID="Image1" runat="server" /><br />
<asp:FileUpload ID="FileUpload1" runat="server" /> </EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("ImageName") %>'></asp:TextBox>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Bind("ImageName") %>'></asp:Label>
</ItemTemplate>
之后给FileUpload1添加属性
FileUpload1.Attributes.Add("onpropertychange", "javascript:document.getElementById('Image1').src=document.getElementById('FileUpload1').value");
之后,提示错误:“未将对象引用设置到对象的实例。”
难道是FileUpload1.Attributes.Add("onpropertychange", "javascript:document.getElementById('Image1').src=document.getElementById('FileUpload1').value");的问题?
哦,原来是这样,那当然找不到了,因为初始情况下是itemtemplate中的控件,关注中... ???
那应该是怎样才能获取到?
请指点
这个时候,模式已经变为EditMode了
难道是这里的问题?
{
//将DetailsView1变成编辑状态
this.DetailsView1.ChangeMode(DetailsViewMode.Edit);
Bind();//此函数里将DetailsView1重新绑定 FileUpload FileUpload1 = (FileUpload)this.DetailsView1.Rows[0].Cells[4].FindControl("FileUpload1");
FileUpload1.Attributes.Add("onpropertychange", "javascript:document.getElementById('Image1').src=document.getElementById('FileUpload1').value");
}
看看这个
你首先应该将detailsview的状态变成编辑,再绑定才可找到,因为fileupload是在EidtTemplate里 C# code
protected void lbtnEdit_Click(object sender, EventArgs e)
{
//将DetailsView1变成编辑状态
this.DetailsView1.ChangeMode(DetailsViewMode.Edit);
Bind();//此函数里将DetailsView1重新绑定 FileUpload FileUpload1 = (FileUpload)this.DetailsView1.Rows[0].Cells[4].FindControl("FileUpload1");
FileUpload1.Attributes.Add("onpropertychange", "javascript:document.getElementById('Image1').src=document.getElementById('FileUpload1').value");
}
我是自动帮定的
加上这句//将DetailsView1变成编辑状态
this.DetailsView1.ChangeMode(DetailsViewMode.Edit);
还是提示:未将对象引用设置到对象的实例。
<form id="form1" runat="server">
<div class="font12">
<asp:DetailsView ID="DetailsView1" runat="server" Height="50px" Width="680px" AutoGenerateRows="False" DataSourceID="SqlDataSource2" DataKeyNames="ID" BackColor="#CCCCCC" OnItemInserting="DetailsView1_ItemInserting" OnItemCommand="DetailsView1_ItemCommand" OnModeChanged="DetailsView1_ModeChanged" OnModeChanging="DetailsView1_ModeChanging" OnItemUpdating="DetailsView1_ItemUpdating" OnDataBinding="DetailsView1_DataBinding" OnDataBound="DetailsView1_DataBound" OnPageIndexChanged="DetailsView1_PageIndexChanged" OnPageIndexChanging="DetailsView1_PageIndexChanging" OnItemCreated="DetailsView1_ItemCreated">
<Fields>
<asp:BoundField DataField="ID" HeaderText="编号" InsertVisible="False" ReadOnly="True"
SortExpression="ID" >
<ItemStyle ForeColor="Blue" />
</asp:BoundField>
<asp:TemplateField HeaderText="所属类别" SortExpression="SmallClassName">
<EditItemTemplate>
<%--<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("SmallClassName") %>'></asp:TextBox>--%>
<asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource1" DataMember="DefaultView" DataTextField="SmallClassName" DataValueField="SmallClassID" SelectedValue='<%# Bind("SmallClassID") %>'>
</asp:DropDownList><asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:hjConnectionString %>"
SelectCommand="SELECT [SmallClassID], [SmallClassName] FROM [ZxalSmallClass]"></asp:SqlDataSource>
</EditItemTemplate>
<InsertItemTemplate>
<%--<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("SmallClassName") %>'></asp:TextBox>--%>
<asp:DropDownList ID="DropDownList2" runat="server" DataSourceID="SqlDataSource1" DataTextField="SmallClassName" DataValueField="SmallClassID">
</asp:DropDownList><asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:hjConnectionString %>"
SelectCommand="SELECT [SmallClassID], [SmallClassName] FROM [ZxalSmallClass]"></asp:SqlDataSource>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("SmallClassName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="新闻标题" SortExpression="Title">
<EditItemTemplate>
<asp:TextBox ID="TextBox4" runat="server" Text='<%# Bind("Title") %>' Width="200px"></asp:TextBox>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBox4" runat="server" Text='<%# Bind("Title") %>' Width="200px"></asp:TextBox>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label4" runat="server" Text='<%# Bind("Title") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="文章内容" SortExpression="Content">
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Content") %>' Width="400px" Height="300px" TextMode="MultiLine"></asp:TextBox> <br />
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="TextBox2"
ErrorMessage="文章内容不能为空 "></asp:RequiredFieldValidator>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Content") %>' Height="300px" TextMode="MultiLine" Width="400px"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox2"
ErrorMessage="文章内容不能为空"></asp:RequiredFieldValidator>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text=<%# DataBinder.Eval(Container.DataItem, "Content", "{0}").Replace(" ", " ").Replace(" ", " ").Replace("\n", "<br>") %> ></asp:Label>
<%--<asp:Label ID="Label2" runat="server" Text=<%# Bind("Content") %> ></asp:Label>--%>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="图片名称" SortExpression="ImageName">
<EditItemTemplate>
<%--<asp:Label ID="Label3" runat="server" Text='<%# Bind("ImageName") %>'></asp:Label>--%>
<%--<img id="Image1" src="upload/<%# DataBinder.Eval(Container.DataItem,"ImageName","{0}") %>" width="150" height="150" /><br />
<input type="file" id="FileUpload1" onpropertychange="imageBroser();" OnKeyPress="event.returnValue=IsDigit();" /><br />--%>
<%--<asp:FileUpload name="FileUpload1" runat="server" Width="400px" onpropertychange="imageBroser();" OnKeyPress="event.returnValue=IsDigit();" />--%>
<asp:Image ID="Image1" runat="server" /><br />
<asp:FileUpload ID="FileUpload1" runat="server" />
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("ImageName") %>'></asp:TextBox>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Bind("ImageName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="PublishDate" HeaderText="发布时间" SortExpression="PublishDate" InsertVisible="False" ReadOnly="True" />
<asp:BoundField DataField="ClickCount" HeaderText="点击量" SortExpression="ClickCount" InsertVisible="False" ReadOnly="True" />
<asp:TemplateField HeaderText="管理" ShowHeader="False">
<EditItemTemplate>
<asp:LinkButton ID="lbtnUpdate" runat="server" CausesValidation="True" CommandName="Update"
Text="更新" OnClick="lbtnUpdate_Click"></asp:LinkButton>
<asp:LinkButton ID="lbtnCancel" runat="server" CausesValidation="False" CommandName="Cancel"
Text="取消" OnClick="lbtnCancel_Click"></asp:LinkButton>
</EditItemTemplate>
<ControlStyle ForeColor="Blue" />
<ItemStyle HorizontalAlign="Center" />
<ItemTemplate>
<asp:LinkButton ID="lbtnEdit" runat="server" CausesValidation="False" CommandName="Edit"
Text="编辑" OnClick="lbtnEdit_Click"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Fields>
</asp:DetailsView>
</div>
</form>
</body>
解决立马结分~
38391232
没有this.DetailsView1.DataBind()这样的代码
解决了
下面是代码:
protected void lbtnEdit_Click(object sender, EventArgs e)
{
//将DetailsView1变成编辑状态
this.DetailsView1.ChangeMode(DetailsViewMode.Edit);
//此函数里将DetailsView1重新绑定
this.DetailsView1.DataBind();
Image Image1 = (Image)this.DetailsView1.FindControl("Image1");
FileUpload FileUpload1 = (FileUpload)this.DetailsView1.FindControl("FileUpload1");
//FileUpload1.Attributes.Add("onpropertychange", "javascript:document.getElementById('Image1').src=document.getElementById('FileUpload1').value");
FileUpload1.Attributes.Add("onpropertychange", "javascript:document.getElementById('"+Image1.ClientID+"').src=document.getElementById('"+FileUpload1.ClientID+"').value");
}ClientiD表示运行时控件在页面上的动态id,很常用
结分~