使用多个选择查询来获取网格视图的数据

时间:2011-07-03 13:11:49

标签: asp.net gridview c#-3.0

在.net 2008

我想使用多个选择查询将数据绑定到网格视图 原因是我希望数据来自多个数据 我必须先对数据进行一些处理才能在网格视图中显示

一个例子是(我不必实际这样做)

我有两个表,其中列为uid,uname为udata 其他列uid和unum命名为uinfo 现在的问题是我希望通过复杂的操作将uid uname和unum连接在一起并在网格视图中显示它 复杂的操作只能在C#中完成,而不能在T-SQL中完成

我基本上假设单个查询无法获取数据

所以我如何为网格视图

执行此操作

4 个答案:

答案 0 :(得分:0)

如果gridview可以显示它,那么你无法真正说明“单个查询无法获取数据”。 UNION您的各种select语句,确保列的数据类型对齐。您还可以访问服务器上的连接运算符和各种子字符串函数。

答案 1 :(得分:0)

遍历您的DataTable并创建另一个数据表以绑定到网格视图。

答案 2 :(得分:0)

您使用ADO.NET返回DataSet两个DataTablejoinunion个查询,并使用标识符column例如来自QueryType的{​​{1}}类型并使用bit,第一个查询集union改为QueryType,第二个查询设置为0然后C#部分只是它们之间的尊重,但1

我更喜欢带有两张桌子的QueryType

答案 3 :(得分:0)

请尝试以下代码。

    <div>
        <asp:SqlDataSource ID="sds_udata" runat="server" 
            ConnectionString="<%$ ConnectionStrings:Local %>" 
            ProviderName="<%$ ConnectionStrings:Local.ProviderName %>" 
            SelectCommand="select * from udata" 
            </asp:SqlDataSource>
        <asp:SqlDataSource ID="sds_uninfo" runat="server" 
            SelectCommand="select * from uinfo" 
            ConnectionString="<%$ ConnectionStrings:Local %>" 
            ProviderName="<%$ ConnectionStrings:Local.ProviderName %>"></asp:SqlDataSource>
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
            DataSourceID="sds_udata" AutoGenerateEditButton="True" ShowFooter="True" 
            AutoGenerateDeleteButton="True" 
            DataKeyNames="uid">
            <Columns>                
            <asp:TemplateField HeaderText="User ID" >
                <itemtemplate>
                    <asp:Label ID="uid" runat="server" Text='<%# Bind("uid") %>'></asp:Label>
                </itemtemplate>
                <edititemtemplate>
                    <asp:TextBox ID="txtuid" runat="server" Text='<%# Bind("uid") %>' Width="98%" MaxLength="6" ></asp:TextBox>
                </edititemtemplate>
                <footertemplate>
                   <asp:TextBox ID="txtNewuid" runat="server" Text='<%# Bind("uid") %>' Width="98%" MaxLength="6"></asp:TextBox>
                </footertemplate>
                <itemstyle width="80px" /> 
            </asp:TemplateField>
            <asp:TemplateField HeaderText="User Name" >
                <itemtemplate>
                    <asp:Label ID="uname" runat="server" Text='<%# Bind("uname") %>'></asp:Label>
                </itemtemplate>
                <edititemtemplate>
                    <asp:TextBox ID="txtuname" runat="server" Text='<%# Bind("uname") %>' Width="98%" MaxLength="6" ></asp:TextBox>

                </edititemtemplate>
                <footertemplate>
                   <asp:TextBox ID="txtNewuname" runat="server" Text='<%# Bind("uname") %>' Width="98%" MaxLength="6" ></asp:TextBox>

                </footertemplate>
                <itemstyle width="80px" /> 
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Custom Field" >
                <ItemTemplate>
                    <asp:Label ID="lblLocation" runat="server" Text='<%# LookupCustomeField(DataBinder.Eval(Container.DataItem, "uid"), DataBinder.Eval(Container.DataItem, "uname"), DataBinder.Eval(Container.DataItem, "unum")) %>'></asp:Label> 
                </ItemTemplate>                   
               <ItemStyle Width="25%" /> 
           </asp:TemplateField> 
            </Columns>
        </asp:GridView>
    </div>


    protected string LookupCustomeField(object uid, object uname, object unum)
    {
        string strUid, strUname, strUnum, result;
        if ((string.IsNullOrEmpty(uid.ToString())) || (string.IsNullOrEmpty(uname.ToString())) ||(string.IsNullOrEmpty(unum.ToString())))
            return null;

        strUid = uid.ToString();
        strUname = uname.ToString();
        strUnum = unum.ToString();
        result = strUid+ strUname+strUnum;            
        return result;
    }