2014-09-10 59 views
0

訪問圖像我已經在GridView如下:爲什麼我無法從代碼隱藏

<asp:GridView ShowHeaderWhenEmpty="false" AlternatingRowStyle-BackColor="#EBE9E9" AutoGenerateColumns="false" OnSorting="yourTasksGV_Sorting" AllowSorting="true" ID="yourTasksGV" runat="server" ClientIDMode="Static" EmptyDataText="You currently have no tasks assigned to you" OnRowDataBound="yourTasksGV_RowDataBound" OnRowCreated="yourTasksGV_RowCreated"> 
    <Columns> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <asp:Image ID="imgExpCol" AlternateText="plus" ClientIDMode="Static" ImageUrl="~/theImages/subTaskPlus.png" runat="server" CssClass="imgExpCol" /> 
       <asp:Panel ID="pnlSubTasks" runat="server" CssClass="pnlSubTasks" ClientIDMode="Static"> 
        <asp:GridView ID="gvSubTasks" runat="server" AutoGenerateColumns="false" ClientIDMode="Static"> 
         <Columns> 
          <asp:BoundField DataField="Task Name" HeaderText="Task Name" /> 
          <asp:BoundField DataField="Due Date" HeaderText="Due Date" /> 
         </Columns> 
        </asp:GridView> 
       </asp:Panel> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:HyperLinkField Target="_self" DataNavigateUrlFields="Task Detail" DataTextField="Task Name" DataNavigateUrlFormatString="" HeaderText="Task Detail" SortExpression="Task Name" ItemStyle-CssClass="taskTableColumn" /> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <asp:ImageButton ImageUrl="~/theImages/Dependencies.png" CssClass="gvTaskDep btnShowDepend" runat="server" ID="btnShowDepend" OnCommand="btnShowDepend_Command" CommandName="TaskDepend" AlternateText='<%#Eval("Object") + "," + Eval("FK") %>' CommandArgument='<%#Eval("Object") + "," + Eval("FK") %>' ToolTip="Click to view Dependencies" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:BoundField DataField="Service" HeaderText="Service" SortExpression="Service" ItemStyle-CssClass="taskTableColumn" /> 
     <asp:BoundField DataField="Status" HeaderText="Status" SortExpression="Status" ItemStyle-CssClass="taskTableColumn" /> 
     <asp:BoundField DataField="Due Date" HeaderText="Due" SortExpression="Due Date" ItemStyle-CssClass="taskTableColumn" /> 
     <asp:BoundField DataField="Owner" HeaderText="Owner" SortExpression="Owner" ItemStyle-CssClass="taskTableColumn" /> 
     <asp:BoundField DataField="Client" HeaderText="Client" SortExpression="Client" ItemStyle-CssClass="taskTableColumn" /> 
     <asp:BoundField DataField="Site" HeaderText="Site" SortExpression="Site" ItemStyle-CssClass="taskTableColumn" /> 
     <asp:BoundField DataField="Practice" HeaderText="Practice" SortExpression="Practice" ItemStyle-CssClass="taskTableColumn" /> 
     <asp:BoundField DataField="Provider" HeaderText="Provider" SortExpression="Provider" ItemStyle-CssClass="taskTableColumn" /> 
     <asp:BoundField DataField="Roles" HeaderText="Roles" SortExpression="Roles" ItemStyle-CssClass="taskTableColumn" /> 
     <asp:BoundField DataField="Object" HeaderText="Object" SortExpression="Object" ItemStyle-CssClass="hideTag" HeaderStyle-CssClass="hideTag" /> 
     <asp:BoundField DataField="FK" HeaderText="FK" SortExpression="Object" ItemStyle-CssClass="hideTag" HeaderStyle-CssClass="hideTag" /> 
     </Columns> 
</asp:GridView> 

當我嘗試從代碼隱藏imgExpCol,它不能找到它。

如何解決該問題?

+0

你是如何試圖訪問?在哪個事件? – 2014-09-10 13:18:01

+0

請顯示您的事件處理程序代碼。 – 2014-09-10 13:19:27

+3

'imgExpCol'是在Item Template內部創建的,意思是在頁面上可能有多個該控件的實例。你期望它參考哪一個?或者你是否發現它與引發事件的控制相關? – Basic 2014-09-10 13:19:46

回答

2

由於項目模板是在運行時創建的,因此您將無法訪問它們。嘗試類似

var imgExpCol= yourTasksGV.FindControl("imgExpCol") as Image; 
+0

這是我沒有問題的。這是我無法訪問的'imgExpCol'圖片。 – SearchForKnowledge 2014-09-10 13:51:42

+0

同樣的事情。只需將其更改爲: var imgExpCol = yourTasksGV.FindControl(「imgExpCol」)as Image; – CrazyPaste 2014-09-10 13:54:23

+0

'var iExpCol = yourTasksGV.FindControl(「imgExpCol」)as System.Web.UI.WebControls.Image; \t \t \t \t \t如果(iExpCol!= NULL) \t \t \t \t \t { \t \t \t \t \t \t MessageBox.Show( 「隱藏」); \t \t \t \t \t}'好像圖像是NULL:/ – SearchForKnowledge 2014-09-10 14:00:30

2

正如KidBilly所說,您無法直接訪問它們。另外,請注意,由於不允許在單個頁面上具有多個相同的ID(即GridView每行一個按鈕),因此它們的ID在運行時會被損壞,在這種情況下,您需要查看在知道要傳遞給FindControl()之前它們是如何被破壞的。

舉例來說,我有一個ID =「編輯」一個LinkBut​​ton,當它被渲染,就成了ID =「MainContent_LoginView2_existingAccounts_edit_0」

+0

我用'的ClientIDMode =「靜態」'避免 – SearchForKnowledge 2014-09-10 14:10:18

+0

但它不允許有不止一個的ID是相同的,這將導致各種問題。您可以使用可預測的ClientIDMode,因此它仍然將rowid附加到它的末尾。 – Lukos 2014-09-11 10:15:49