我目前正在ASP.NET/C#中做一个项目,在该项目上我有一个GridView,它从两个不同的表ID和Initials获取两种类型的数据。

该表本身必须像这样:



单元1

ID-缩写



和旁边的一栏:



单元2

ID-缩写



从表2调用ID,而从表1调用INITIALS。每个ID都有自己的INITIALS,但是我的问题是,由于INITIALS被调用了两次,因此它们在后面的列和前面的列中重复出现,如here所示。

我当前的代码(ASPX):

<asp:GridView ID="GridView1" runat="server" CssClass= "table table-hover table-bordered" AllowPaging="false" PageSize="4" OnPageIndexChanging="OnPaging" OnPageIndexChanged="SearchByTagButton_Click" Style="max-width:75%;" AutoGenerateColumns="false">
                <Columns>
                    <asp:TemplateField HeaderText="UNIDADE" HeaderStyle-ForeColor="#B70700" HeaderStyle-Width="34%">
                        <ItemTemplate>
                            <%# DataBinder.Eval(Container.DataItem, "unidade")%>
                            -
                            <%# DataBinder.Eval(Container.DataItem, "sigUnidade")%>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="UNIDADE APOIADA" HeaderStyle-ForeColor="#B70700" HeaderStyle-Width="34%">
                        <ItemTemplate>
                            <%# DataBinder.Eval(Container.DataItem, "unidadeApoiada")%>
                            -
                            <%# DataBinder.Eval(Container.DataItem, "sigUnidade")%>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>


和C#:

SqlDataAdapter da;
    DataSet ds1 = new DataSet();
    DataSet ds2 = new DataSet();
SqlConnection conn = new SqlConnection(strConn);

    da = new SqlDataAdapter("SELECT ts.unidade, u.sigUnidade FROM T_SECRETARIAS ts INNER JOIN UNIDADES u on u.unidade = ts.unidade WHERE '%" + txtCodigoSearch.Text + "%' IS NULL OR LEN('%" + txtCodigoSearch.Text + "%') = 0 OR (ts.unidade='%" + txtCodigoSearch.Text + "%') OR ts.unidade LIKE '%" + txtCodigoSearch.Text + "%'", conn);
    da.Fill(ds1);
    da = new SqlDataAdapter("SELECT ts.unidadeApoiada, u.sigUnidade FROM T_SECRETARIAS ts INNER JOIN UNIDADES u on u.unidade = ts.unidadeApoiada WHERE '%" + txtCodigoSearch.Text + "%' IS NULL OR LEN('%" + txtCodigoSearch.Text + "%') = 0 OR (ts.unidadeApoiada='%" + txtCodigoSearch.Text + "%') OR ts.unidadeApoiada LIKE '%" + txtCodigoSearch.Text + "%'", conn);
    da.Fill(ds2);
    ds1.Merge(ds2);
    GridView1.DataSource = ds1;
    GridView1.DataBind();


我基本上联接了两个数据集,每个SQL查询一个,因为我发现这是联接两个查询以获取两个ID的唯一方法(它们是不同的,因为它们在表1中都是“主ID”,但在在表2中,它们也可以是“子ID”。

我试图解释自己的最佳状态,但希望将我的表格式化为ID-INITIALS,不要重复。如果能得到任何帮助,我将不胜感激。

最佳答案

从注释开始,您可以具有以下代码:

SqlDataAdapter da;
DataSet ds1 = new DataSet();
SqlConnection conn = new SqlConnection(strConn);

da = new SqlDataAdapter("SELECT ts.unidade, ts.unidadeApoiada, u1.sigUnidade as sigUnidade1, u2.sigUnidade as sigUnidade2 FROM T_SECRETARIAS ts INNER JOIN UNIDADES u1 on u1.unidade = ts.unidade INNER JOIN UNIDADES u2 on u2.unidade = ts.unidadeApoiada WHERE....", conn);
da.Fill(ds1);
GridView1.DataSource = ds1;
GridView1.DataBind();


并在aspx中:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
            <Columns>
                <asp:TemplateField HeaderText="UNIDADE">
                    <ItemTemplate>
                        <%# DataBinder.Eval(Container.DataItem, "unidade")%>
                        -
                        <%# DataBinder.Eval(Container.DataItem, "sigUnidade1")%>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="UNIDADE APOIADA">
                    <ItemTemplate>
                        <%# DataBinder.Eval(Container.DataItem, "unidadeApoiada")%>
                        -
                        <%# DataBinder.Eval(Container.DataItem, "sigUnidade2")%>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>

关于c# - 如何在GridView中使两列具有相同的字段但值不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43227776/

10-11 06:38