2013-07-01 61 views
7

我有一個網格視圖和正在使用的各種數據得到的值:隱藏綁定列的,但仍然能夠用C#

<asp:BoundField DataField="Catagory" HeaderText="Support Catagory" SortExpression="Catagory" /> 
<asp:BoundField DataField="AppName" HeaderText="Application Name" SortExpression="IncidentNumber" /> 
<asp:BoundField DataField="IncidentNumber" HeaderText="Incident #" SortExpression="IncidentNumber" /> 
<asp:BoundField DataField="Hours" HeaderText="Hours" SortExpression="Hours" /> 
<asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" /> 
<asp:BoundField DataField="CreatedDate" HeaderText="Created Date" SortExpression="CreatedDate" /> 
<asp:BoundField DataField="PK_DailyTaskHours" HeaderText="" SortExpression="PK_DailyTaskHours" ReadOnly="true" /> 
<asp:BoundField DataField="PK_NonScrumStory" HeaderText="" SortExpression="PK_NonScrumStory" ReadOnly="true" /> 

的最後兩列,但是我不想顯示,我使用所以我可以用這個C#代碼檢索主鍵:

string dailyTaskHoursPK = (string)e.Values["PK_DailyTaskHours"].ToString(); 
    string nonScrumStoryPK = (string)e.Values["PK_NonScrumStory"].ToString(); 
    SqlDataSource4.DeleteParameters["dailyTaskHoursPK"].DefaultValue = dailyTaskHoursPK; 
    SqlDataSource4.DeleteParameters["nonScrumStoryPK"].DefaultValue = nonScrumStoryPK; 

但是,我不想顯示最後兩列。但是,當我設置:

Visible="false" 

並嘗試運行該程序,我得到以下錯誤:未設置爲一個對象的實例

對象引用。

描述:執行當前Web請求期間發生未處理的異常。請查看堆棧跟蹤以獲取有關該錯誤的更多信息以及源代碼的位置。

異常詳細信息:System.NullReferenceException:未將對象引用設置爲對象的實例。

我在做什麼錯?如何防止用戶看到這些字段?

回答

6

特雷弗是正確的,你需要設置你的DataKeyNames像這樣在您的DataGrid中的標記:

<asp:GridView ID="GridView1" runat="server" 
     DataKeyNames="PK_DailyTaskHours,PK_NonScrumStory" 

一旦你做到了這一點,你可以得到的值返回字符串形式是這樣的:

 protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) 
    { 
     string dailyTaskHoursPK = GridView1.DataKeys[0].Values["PK_DailyTaskHours"].ToString(); 
     string nonScrumStoryPK = GridView1.DataKeys[0].Values["PK_NonScrumStory"].ToString(); 
    } 
3

您還必須設置數據綁定控件的DataKeyNames屬性。將可見設置爲false將導致字段不會發送到客戶端,除非在DataKeyNames屬性中指定了該字段。請參閱DataControlField.Visible Property上的msdn頁面。

+0

您能詳細說明DataKeyNames屬性嗎?我不確定你的意思。 –

5

嘗試讓它們可見=「true」,但用css隱藏它們。

<style type="text/css"> 
.hidden-field 
{ 
    display:none; 
} 
</style> 

... 
<asp:BoundField DataField="PK_DailyTaskHours" HeaderText="" SortExpression="PK_DailyTaskHours" ReadOnly="true" > 
    <ItemStyle CssClass="hidden-field"/> 
</asp:BoundField> 
<asp:BoundField DataField="PK_NonScrumStory" HeaderText="" SortExpression="PK_NonScrumStory" ReadOnly="true" > 
    <ItemStyle CssClass="hidden-field"/> 
</asp:BoundField> 
+1

這確實會刪除框中的文本,但仍可以看到單元格。 –

+0

是的,我同意,我會工作,但你的解決方案更好。 –

+0

這種方法適用於我 - 我只需將該類應用於ItemStyle和HeaderStyle。 (而且我需要訪問客戶端的值,而不是服務器端。) – wloescher

1

當你想隱藏的列,並獲得它的價值,你指定DataKeyNames屬性在aspx頁面的GridView。

<asp:GridView ID="GridView1" runat="server" DataKeyNames="PK_DailyTaskHours" ...> 

然後,您可以在後面的代碼中檢索該列值,如下所示。

string showId = (string) GridView1.DataKeys[6].Value.ToString(); 
1

上面的代碼隱藏BoundField的值,但不隱藏headertext和錯過匹配所有列,所以我會改變belove

<style type="text/css"> 
     .hidden-field 
     { 
      display:none; 
     } 
    </style> 

...

<asp:BoundField DataField="PK_NonScrumStory" HeaderText="" SortExpression="PK_NonScrumStory" ReadOnly="true" ItemStyle-CssClass="hidden-field" HeaderStyle-CssClass="hidden-field" > 
</asp:BoundField> 

現在是適當的工作

+0

對我來說唯一的工作解決方案!非常感謝! –

0

嘗試使用邏輯上使用的字體大小

例如

grid.Columns[0].HeaderStyle.Font.Size = grid.Columns[0].ItemStyle.Font.Size = 0; 
相關問題