使Gridview显示复选框而不是0和1

时间:2014-04-23 15:39:53

标签: c# asp.net gridview

我有GridView,显示数字1或0的记录。

如何将记录转换为复选框,如果值为1则检查该复选框;如果值为0,则将其取消选中?

<asp:GridView ID="gvStations" runat="server">
    <columns>
        <asp:templatefield headertext="Type" sortexpression="TypeDesc">
            <edititemtemplate>
                <asp:CheckBox ID="cbTypeEdit" runat="server" Text='<%# Bind("TypeDesc") />
            </edititemtemplate>
            <itemtemplate>
                <asp:CheckBox ID="cbType" runat="server" Text='<%# Bind("TypeDesc") ></asp:CheckBox>
            </itemtemplate>
            <itemstyle horizontalalign="Center" />
        </asp:templatefield>
        <asp:templatefield headertext="Type 2" sortexpression="TypeDesc2">
            <edititemtemplate>
                <asp:CheckBox ID="cbType2Edit" runat="server" Text='<%# Bind("TypeDesc2") />
            </edititemtemplate>
            <itemtemplate>
                <asp:CheckBox ID="cbType2" runat="server" Text='<%# Bind("TypeDesc2") ></asp:CheckBox>
            </itemtemplate>
            <itemstyle horizontalalign="Center" />
        </asp:templatefield>
    </columns>
</asp:GridView>

现在我可以将它们改为X,如果它是1和#34;空白&#34;如果是0。

protected void gvStations_RowDataBound(object sender, GridViewRowEventArgs e)
{
    for (int i = 0; i <= this.gvStations.Rows.Count - 1; i++)//from here down changes the 1's to X's and O's to blanks.
    {
        for (int j = 0; j <= this.gvStations.Columns.Count - 1; j++)
        {
            if (j != 1 && j != 2)
            {
                if (this.gvStations.Rows[i].Cells[j].Text == "1")
                {
                    this.gvStations.Rows[i].Cells[j].Text = "X";
                }
                else if (this.gvStations.Rows[i].Cells[j].Text == "0")
                {
                    this.gvStations.Rows[i].Cells[j].Text = " ";
                }
            }
        }
    }
}

3 个答案:

答案 0 :(得分:3)

对于显示,您可以像绑定值的单个比较一样简单:

<asp:CheckBox ID="cbTypeEdit" runat="server"
              Checked='<%# (int)Eval("TypeDesc") == 1 %>'/>

为了处理网格行的编辑,我担心您需要处理GridView的RowUpdated事件并手动转换值。

答案 1 :(得分:1)

我认为应该是:

<asp:CheckBox ID="cbTypeEdit" runat="server" Text='<%# Bind("TypeDesc") %>' Checked="<%# (Int)Eval("TypeDesc") == 0 ? false : true %>" />   

答案 2 :(得分:0)

一个简单的辅助函数会更好,因为你有TypeDescTypeDesc2

标记

Checked='<%# SetCheckedStatus(Bind("TypeDesc")) %>'
Checked='<%# SetCheckedStatus(Bind("TypeDesc2")) %>'

代码隐藏

protected bool SetCheckedStatus(object typeDesc)
{
    var isChecked = false;
    var intValue = 0;
    if (typeDesc != null)
    {
        int.TryParse(typeDesc.ToString(), out intValue);
        if (intValue == 1) { isChecked = true; }
    }
    return isChecked;
}

这种方式更清晰的标记