Listview中的ASP.Net Gridview-如何访问Listview上一行数据
我在谷歌上查了几个小时,但找不到解决我具体问题的方法 我是ASP.NET&c新手-我有一个列表视图,其中包含数据行(会议日期),每个数据行中都有一个gridview,显示要下载的任何关联文件。一切正常。现在我想添加另一行,可以选择将文件上载到该会议。上传工作正常,但我需要访问父listview行CRMID字段(以传递到存储过程以更新数据库)。我已经试了很多次了,但似乎无法访问它 任何帮助都将不胜感激,谢谢。我附加了代码,但最好用屏幕截图来显示(我是这个网站的新手,所以不能上传一个,但可以在这里查看一个:)。当他们点击上传按钮时,我想从上一行访问该CRMIDListview中的ASP.Net Gridview-如何访问Listview上一行数据,asp.net,listview,gridview,Asp.net,Listview,Gridview,我在谷歌上查了几个小时,但找不到解决我具体问题的方法 我是ASP.NET&c新手-我有一个列表视图,其中包含数据行(会议日期),每个数据行中都有一个gridview,显示要下载的任何关联文件。一切正常。现在我想添加另一行,可以选择将文件上载到该会议。上传工作正常,但我需要访问父listview行CRMID字段(以传递到存储过程以更新数据库)。我已经试了很多次了,但似乎无法访问它 任何帮助都将不胜感激,谢谢。我附加了代码,但最好用屏幕截图来显示(我是这个网站的新手,所以不能上传一个,但可以在这里查
<asp:ListView ID="ListView1" runat="server" OnItemDataBound="ListView1_ItemDataBound" DataKeyNames="CRMID">
<LayoutTemplate>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<th width="15px"> <%--"15px">--%>
</th>
<th width="10%">
CRMID
</th>
<th width="15%">
Period
</th>
<th width="15%">
Type
</th>
<th width="15%">
Planned Date
</th>
<th width="15%">
Actual Date
</th>
<th>
CRMNotes
</th>
</tr>
</table>
<div runat="server" id="itemPlaceHolder">
</div>
</LayoutTemplate>
<ItemTemplate>
<div id="Div1" class="SUBDIV" runat="server">
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="15px">
<div class="btncolexp collapse">
</div>
</td>
<td width="10%">
<%#Eval("CRMID") %>
</td>
<td width="15%">
<%#Eval("PeriodDescr") %>
</td>
<td width="15%">
<%#Eval("CRMType") %>
</td>
<td width="15%">
<%#Eval("CRMPlannedDate", "{0:dd/mm/yyyy}")%>
</td>
<td width="15%">
<%#Eval("CRMActualDate", "{0:dd/mm/yyyy}")%>
</td>
<td>
<%#Eval("CRMNotes")%>
</td>
</tr>
<tr>
<td colspan="8" style="border-bottom-style:none">
<div style="margin: 20px">
<asp:GridView ID="GridView1" runat="server" class="MasterListView" AutoGenerateColumns="false" Width="100%"
OnRowCommand="GridView1_RowCommand"
>
<Columns>
<asp:BoundField HeaderText="File Name" DataField="ContractReviewMeetingFileName" ItemStyle-Width="80%"/>
<asp:TemplateField HeaderText="Download" ItemStyle-Width="10%" >
<ItemTemplate>
<asp:LinkButton ID="lnkDownload" runat="server"
CommandArgument='<%# Eval("ContractReviewMeetingFileFullPath") %>' CommandName="cmdDownload">Download
</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField HeaderText="Upload Date" DataField="ContractReviewMeetingFileUploadDate"
DataFormatString="{0:d}" ItemStyle-Width="10%" />
<%--<asp:BoundField HeaderText="Description" DataField="ContractReviewMeetingFileDescr" />--%>
</Columns>
</asp:GridView>
</div>
</td>
</tr>
<tr>
<td colspan="8">
<div style="margin: 10px 20px 20px 80px; text-align:center">
Upload File: <asp:FileUpload ID="FileUploader" runat="server"/>
<asp:Button ID="UploadButton" runat="server" Text="Upload" OnClick="UploadButton_Click" /><br />
<asp:Label runat="server" id="StatusLabel" text="Upload status: " />
</div>
</td>
</tr>
</table>
</div>
</ItemTemplate>
</asp:ListView>
--%>
CRMID
时期
类型
计划日期
实际日期
CRMNotes
下载
上载文件:
和代码隐藏(相关功能):
protectedvoiduploadbutton\u单击(对象发送方,事件参数e)
{
//FileUpload FileUploader=(FileUpload)ListView1.FindControl(“FileUploader”);
变量btn=(按钮)发送器;
变量项=(ListViewItem)btn.NamingContainer;
var FileUploader=(FileUpload)item.FindControl(“FileUploader”);
var StatusLabel=(Label)item.FindControl(“StatusLabel”);
//我试过各种各样的方法,但都不高兴。。
//var itemParent=(ListViewItem)item.NamingContainer;
//var CRMID=itemParent.FindControl(“CRMID”);
字符串DefaultFileName=@“\\BCVSTORE03\PublicHealthStore$\CMS\Testing\”;
if(FileUploader.HasFile)
尝试
{
字符串filename=Path.GetFileName(FileUploader.filename);
FileUploader.SaveAs(DefaultFileName+filename);//Server.MapPath(DefaultFileName)+filename);
//FileUploader.SaveAs(Server.MapPath(DefaultFileName)+
//FileUploader.FileName);
StatusLabel.Text=“文件名:”+
FileUploader.PostedFile.FileName+“
”+
FileUploader.PostedFile.ContentLength+“kb
”+
“内容类型:”+
FileUploader.PostedFile.ContentType+“
上传成功”;
}
捕获(例外情况除外)
{
StatusLabel.Text=“错误:”+ex.Message.ToString();
}
其他的
{
StatusLabel.Text=“您尚未指定文件。”;
}
}
您的FindControl调用失败,因为找不到控件
不输出控件,只输出字符串文本
作为一个快速解决方案,这里有一个建议。在上载控件附近有一个隐藏字段,该字段将为您提供id:
Upload File: <asp:FileUpload ID="FileUploader" runat="server"/>
<asp:Button ID="UploadButton" runat="server" Text="Upload" OnClick="UploadButton_Click" /><br />
<asp:Label runat="server" id="StatusLabel" text="Upload status: " />
<asp:HiddenField runat="server" id="CRMIDHiddenField" Value='<%# Eval("CRMID") %>' />
其他解决方法包括:
我认为你的问题不应该是答案,而应该是评论。无论如何,是的,我相信正确的方法是使用RowCommand进行上传。您仍然应该能够通过
FindControl
获取所有信息,因为RowCommand知道它在哪一行被触发。但是你也应该能够
Upload File: <asp:FileUpload ID="FileUploader" runat="server"/>
<asp:Button ID="UploadButton" runat="server" Text="Upload" OnClick="UploadButton_Click" /><br />
<asp:Label runat="server" id="StatusLabel" text="Upload status: " />
<asp:HiddenField runat="server" id="CRMIDHiddenField" Value='<%# Eval("CRMID") %>' />
var FileUploader = (FileUpload)item.FindControl("FileUploader");
var StatusLabel = (Label)item.FindControl("StatusLabel");
var CRMID = ((HiddenField)itemParent.FindControl("CRMIDHiddenField")).Value;