C# 基于varchar列在Gridview数据绑定中显示复选框
SQL Server表结构:C# 基于varchar列在Gridview数据绑定中显示复选框,c#,asp.net,visual-studio-2010,checkbox,varchar,C#,Asp.net,Visual Studio 2010,Checkbox,Varchar,SQL Server表结构: ChapName varchar(200) Status varchar(1) 要求: 我想在Visual Studio 2010的ASP.NET网格视图中显示复选框 如果status列的值为T,则将其选中,否则将其取消选中。 但它只显示文本框 我已经尝试了和,但如果我尝试绑定此复选框,它会抛出错误 任何样本代码都是必需的,因为我是这个领域的初学者 我尝试的代码: protected void GridView1_RowData
ChapName varchar(200)
Status varchar(1)
要求:
- 我想在Visual Studio 2010的ASP.NET网格视图中显示复选框 如果status列的值为T,则将其选中,否则将其取消选中。 但它只显示文本框
- 我已经尝试了
和
,但如果我尝试绑定此复选框,它会抛出错误 - 任何样本代码都是必需的,因为我是这个领域的初学者
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
CheckBox c = (CheckBox)GridView1.FindControl("ChkStatus");
TextBox TB = (TextBox)GridView1.FindControl("Status");
//Response.Write(TB.Text);
if (TB.Text == "T")
{
c.Checked = true;
}
else
{
c.Checked = false;
}
}
我犯的错误
对象引用未设置为对象的实例
描述:在执行当前网站时发生未处理的异常
要求请查看堆栈跟踪以了解有关堆栈的更多信息
错误及其在代码中的起源
异常详细信息:System.NullReferenceException:对象引用未设置为实例 指一个物体 Aspx标记:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataKeyNames="Comp,QTypeCode" DataSourceID="SDS_QType_Edit"
BackColor="White" BorderColor="#DEDFDE" BorderStyle="None"
BorderWidth="1px"
CellPadding="4" ForeColor="Black" GridLines="Vertical"
AllowPaging="True" AllowSorting="True"
onselectedindexchanged="GridView1_SelectedIndexChanged"
onrowdatabound="GridView1_RowDataBound">
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:CommandField ShowEditButton="True" ShowSelectButton="True" />
<asp:BoundField DataField="QTypeCode" HeaderText="QTypeCode"
SortExpression="QTypeCode" InsertVisible="False"
ReadOnly="True" />
<asp:BoundField DataField="Descr" HeaderText="Descr" SortExpression="Descr" />
<asp:CheckBoxField DataField="AnsReq" HeaderText="AnsReq" ReadOnly="True"
SortExpression="AnsReq" />
<asp:CheckBoxField DataField="OptionPrint" HeaderText="OptionPrint"
ReadOnly="True" SortExpression="OptionPrint" />
<asp:BoundField DataField="Status" HeaderText="Status"
SortExpression="Status" />
<asp:BoundField DataField="TransDate" HeaderText="TransDate"
SortExpression="TransDate" />
<asp:BoundField DataField="UserName" HeaderText="UserName"
SortExpression="UserName" />
<asp:TemplateField HeaderText="Check Box" >
<ItemTemplate>
<asp:CheckBox ID ="ChkStatus" Text="text" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
<EditRowStyle Wrap="False" />
<EmptyDataRowStyle Wrap="False" />
<FooterStyle BackColor="#CCCC99" />
<HeaderStyle Wrap="False" BackColor="#6B696B" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#F7F7DE" ForeColor="Black" HorizontalAlign="Right" />
<RowStyle Wrap="False" BackColor="#F7F7DE" />
<SelectedRowStyle BackColor="#CE5D5A" Font-Bold="True" ForeColor="White"
Wrap="False" />
<SortedAscendingCellStyle BackColor="#FBFBF2" />
<SortedAscendingHeaderStyle BackColor="#848384" />
<SortedDescendingCellStyle BackColor="#EAEAD3" />
<SortedDescendingHeaderStyle BackColor="#575357" />
</asp:GridView>
假设您在asmx上定义了如下所示的网格
<asp:GridView ID="GridView1" runat="server"
onrowdatabound="GridView1_RowDataBound" AutoGenerateColumns="False">
<Columns>
<asp:BoundField DataField="ChapName" HeaderText="ChapName" />
<asp:TemplateField HeaderText="Status" Visible ="false">
<ItemTemplate>
<asp:Label ID="Status" runat="server" Text='<%# Bind("Status") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Check Box" >
<ItemTemplate>
<asp:CheckBox ID ="ChkStatus" Text="text" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
你能用aspx文件中的gridview代码更新这个问题吗?它不起作用。同一错误对象引用未设置为objectOk的实例,哪一行?你能用aspx中的gridview代码更新这个问题吗?你还没有为Status添加模板字段,这就是失败的原因。添加模板字段,并在其中添加标签,如我的答案。当标签处于工作状态时,给出标签id。好的但我无法理解,因为status databound字段也存在,并且您也使用了标签的ID status。。非常感谢…状态字段被隐藏。根据行数据绑定期间的值,决定是否选中复选框。所以隐藏状态字段是必要的。
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
CheckBox c = e.Row.FindControl("ChkStatus") as CheckBox;
Label lbl = e.Row.FindControl("Status") as Label;
if (c!= null && lbl != null )
{
c.Checked = (lbl.Text == "T");
}
}