ASP.NET CheckBoxField - 设置值问题

时间:2010-12-07 23:09:29

标签: c# asp.net

我尝试传递用户选择的某些值,但我无法在gridview中设置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" />

谢谢,

史蒂夫

3 个答案:

答案 0 :(得分:4)

出于某种原因,Microsoft在其ASP.NET中的CheckBox规范中省略了“Value”属性,尽管它是completely valid feature of HTML。我的猜测是他们希望它尽可能与WinForms CheckBox类似(它也缺少'Value'属性)。

如果您想要提供<asp:CheckBox /><asp:CheckBoxField />'价值'属性,您必须自行扩展控件并定义自定义'Value'属性,或使用代码 - 后面填充控件的Attributes或InputAttributes集合。 See this article for more details

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

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

这两种方法的主要区别在于前者在生成的HTML(仅ViewState)中包含Value,而后者将包含。

答案 1 :(得分:0)

尝试根据数据源对象上的布尔条件设置DataField属性。它似乎是绑定到ObjectDataSource。也许在课堂上有一个布尔条件 - 比如IsHired

也许是这样的:

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

MSDN CheckBoxField article上有一个示例。

答案 2 :(得分: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传递数据,以创建传回布尔值的自定义逻辑。拥有控件后,您还可以向其添加属性。掌握它之后,这是一种强大的技术。