从sql数据库中解析列并绑定到网格

时间:2015-07-06 21:06:03

标签: c# sql asp.net

我在SQL表中有一列名为Colors(Colors nchar(10) NOT NULL)的字符串。颜色可以是红色,蓝色,绿色,黄色或橙色。在同一个表中,我有一个名为names(Names nchar(20) NOT NULL)的列,其中包含子项的名称。我的ASP.NET应用程序中有一个网格,每个颜色(红色,蓝色,绿色,黄色或橙色)有五列,另一列有名称。我的网格中的每一行代表一个孩子,对于每个孩子,孩子最喜欢的颜色应该用布尔值标记。有一个简单的方法吗?

不寻找超级特定代码 - 只是通过每个孩子名字的for循环框架。谢谢!

3 个答案:

答案 0 :(得分:1)

假设通过“标记为布尔值”,您希望在网格中使用复选框控件来显示每个颜色列的真/假值,您可以尝试这样的事情:

示例GridView控件(为简洁起见,我不包括数据绑定代码):

function go() {

    var beer = 99;
    while (beer > 0) {
        var verse = [
            beer + " bottles of beer on the wall,",
            beer + " bottles of beer!",
            "Take one down, pass it around", (beer - 1) + " bottles of beer on the wall!"
        ].join("\n");

        document.getElementById("show").innerHTML = verse;

        beer--;
    }
}

在代码隐藏类中:

<asp:GridView ID="childGrid" runat="server" AutoGenerateColumns="false">
        <Columns>
               <asp:BoundField DataField="Name" />
                <asp:TemplateField HeaderText="Red">
                    <ItemTemplate>
                        <asp:CheckBox ID="Red" runat="server"  />
                    </ItemTemplate>
                </asp:TemplateField>
               <asp:TemplateField HeaderText="Green">
                    <ItemTemplate>
                        <asp:CheckBox ID="Green" runat="server"  />
                    </ItemTemplate>
                </asp:TemplateField>
               <asp:TemplateField HeaderText="Yellow">
                    <ItemTemplate>
                        <asp:CheckBox ID="Yellow" runat="server"  />
                    </ItemTemplate>
                </asp:TemplateField>
               <asp:TemplateField HeaderText="Orange">
                    <ItemTemplate>
                        <asp:CheckBox ID="Orange" runat="server" />
                    </ItemTemplate>
                </asp:TemplateField>
        </Columns>

</asp:GridView>

重要:在这个例子中,我使用的是一个简单的约定,即假设GridView中每个CheckBox控件的ID与“Children”的Color列中的值匹配“表格(区分大小写的匹配)。显然,您可以使用特定的外壳(例如,较低的,较高的或正确的)修改ID命名方案,并修改我提供的代码隐藏代码以考虑特定的外壳。

答案 1 :(得分:0)

一种方法是实现&#39;颜色为结果集中的布尔列。 警告:如果您的颜色列表变大,这可能无法很好地扩展 - 但这个概念很常见。

鉴于

CREATE TABLE dbo.Children ( ChildID INT Identity,
                            Name    NVARCHAR(20)
                    ,       Color   NCHAR(10)
                    )

以及一些示例数据:

INSERT INTO dbo.Children (Name, Color) Values ('Ted', 'Red')
INSERT INTO dbo.Children (Name, Color) Values ('Alice', 'Green')

模式如下所示:

SELECT  c.ChildID
,   c.Name
,   CAST( CASE WHEN c.Color = 'Red' THEN 1 ELSE 0 END as BIT) as LovesRed
,   CAST( CASE WHEN c.Color = 'Green' THEN 1 ELSE 0 END as BIT) as LovesGreen
-- ... one for each color
FROM dbo.Children c 

我也意识到我将你的列名更改为单数(颜色而不是颜色)...因为这遵循了一个相当根深蒂固的标准。

然后,您可以非常直接的方式将LovesGreenLovesRed(等)绑定到您的网格。

答案 2 :(得分:0)

您可以这样做:

  protected void dgvSearch_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
    {
        if (e.Row.RowType == System.Web.UI.WebControls.DataControlRowType.DataRow)
        {
            string myVal = e.Row.Cells[1].Text;
            if (myVal == "Red")
            {
                e.Row.Cells[1].Text = "True";
            }
        }
    }

您必须遍历每行上的单元格,但上面的示例显示了如何选择单元格并设置文本。希望这与您所寻找的一致。