2010-12-07 64 views
0

我試圖傳遞用戶選擇的一些值,但我無法在GridView中設置CheckBoxField。ASP.NET CheckBoxField - 設置值問題

有人請讓我知道如何做到這一點?

這是到目前爲止我的代碼...

<asp:GridView ID="GridView1" SkinID="CompacGrid" runat="server" AutoGenerateColumns="False" 
      DataSourceID="ObjectDataSource1" Width="400px" AllowPaging="True" BackColor="White" 
           BorderColor="#999999" BorderStyle="None" BorderWidth="1px" CellPadding="3" 
           GridLines="Vertical"> 
      <RowStyle BackColor="#EEEEEE" ForeColor="Black" /> 
      <Columns> 


        <asp:CheckBoxField headertext="mm" /> 

謝謝

史蒂夫

回答

0

嘗試基於數據源對象上的布爾條件設置DataField屬性。看起來你綁定到一個ObjectDataSource。也許這個班上有一個布爾條件 - 比如說是IsHired

也許是這樣的:

 <asp:CheckBoxField headertext="mm" DataField="IsHired" /> 

有一個在MSDN CheckBoxField article一個樣本。

+0

對不起,我忘了提及我的數據源中沒有布爾標誌。感謝您的快速幫助。 – Steve 2010-12-07 23:25:50

+0

@Steve:那你在找什麼?在你的問題中你不清楚你有什麼工作/任務,或者你想要的輸出是什麼。 – 2010-12-07 23:33:44

+0

我需要傳遞數據源中的ID字段,但複選框只允許我使用布爾值。在傳統的ASP中,我能夠傳遞任何我想要的值。 – Steve 2010-12-07 23:42:12

4

由於某些原因,Microsoft忽略了它的規範中的Value的屬性,儘管它是一個completely valid feature of HTML。我的猜測是,他們希望它儘可能類似於WinForms CheckBox(它也缺少'Value'屬性)。

如果您想給<asp:CheckBox /><asp:CheckBoxField />一個'Value'屬性,您必須自己擴展控制並定義一個自定義的'Value'屬性,或者使用代碼隱藏來填充Attributes或InputAttributes控制權的收集。 See this article for more details

cbMyCheckBoxField.Attributes.Add("Value", "foo"); 

cbMyCheckBoxField.InputAttributes.Add("Value", "foo"); 

這兩種方法之間的主要區別在於,前者將包括在生成的HTML(僅視圖狀態)的值,而後者的意志。

0

要添加到Nathan的答案:我會爲您的GridView使用RowDataBound事件。假設你綁定了一個DataTable,有趣的列是[0]。

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    //Check for a data row 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     //Find the checkbox control by ID and set it. 
     ((CheckBox)e.Row.FindControl("CheckBoxId")).Checked = IsItemChecked(((DataRowView)e.Row.DataItem)[0]); 
    } 
} 

的IsItemChecked功能可以傳遞來自DataItem的數據來創建傳遞迴一個布爾定製邏輯。一旦你有了控制權,你也可以爲它添加屬性。一旦你掌握了它,這是一個強大的技術。