Listview中的ASP.Net Gridview-如何访问Listview上一行数据

Listview中的ASP.Net Gridview-如何访问Listview上一行数据,asp.net,listview,gridview,Asp.net,Listview,Gridview,我在谷歌上查了几个小时,但找不到解决我具体问题的方法 我是ASP.NET&c新手-我有一个列表视图,其中包含数据行(会议日期),每个数据行中都有一个gridview,显示要下载的任何关联文件。一切正常。现在我想添加另一行,可以选择将文件上载到该会议。上传工作正常,但我需要访问父listview行CRMID字段(以传递到存储过程以更新数据库)。我已经试了很多次了,但似乎无法访问它 任何帮助都将不胜感激,谢谢。我附加了代码,但最好用屏幕截图来显示(我是这个网站的新手,所以不能上传一个,但可以在这里查

我在谷歌上查了几个小时,但找不到解决我具体问题的方法

我是ASP.NET&c新手-我有一个列表视图,其中包含数据行(会议日期),每个数据行中都有一个gridview,显示要下载的任何关联文件。一切正常。现在我想添加另一行,可以选择将文件上载到该会议。上传工作正常,但我需要访问父listview行CRMID字段(以传递到存储过程以更新数据库)。我已经试了很多次了,但似乎无法访问它

任何帮助都将不胜感激,谢谢。我附加了代码,但最好用屏幕截图来显示(我是这个网站的新手,所以不能上传一个,但可以在这里查看一个:)。当他们点击上传按钮时,我想从上一行访问该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">
                                &nbsp;
                            </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") %>' />
其他解决方法包括:

  • 在当前仅输出CMDIR的位置使用一些控件
  • [在我看来,这是正确的方法,但需要做很多工作]重构代码,使用列表视图命令,而不仅仅是单个控件事件,然后使用数据键

  • 我认为你的问题不应该是答案,而应该是评论。无论如何,是的,我相信正确的方法是使用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;