如何在 GridView 中具有相同字段但值不同的两列



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

表本身必须如下所示:


单元 1

ID - 缩写


旁边有一列:


第 2 单元

ID - 缩写


从表 2 调用 ID,从表 1 调用首字母。每个 ID 都有自己的首字母缩写,但我的问题是,由于缩写被调用了两次,它们在以下和之前的列中重复出现,如下所示。

我当前的代码 (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 - 缩写,没有任何重复。如果我能得到任何帮助,我将不胜感激。

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

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>

如何仅对 UNION 使用一个查询。 所以你会有 选择 ts.unidade , u.sigUnidade 从 T_SECRETARIAS ts 内部加入 unidades .. 联盟 SELECT ts.unidadeApoiada as unidas, u.sigUnidade FROM T_SECRETARIAS ts INNER JOIN ...

您必须对两个查询的输出使用相同的名称

您只需创建一列,例如电话号码,我认为这是您问题的完美示例。我也在尝试解决这些类型的错误。这就是为什么我告诉你使用这段代码。我希望它对你有用。它是将多个文本框值合并到 gridview 中的单个单元格的示例代码。

protected void Button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(@"Data Source=RVMSQLEXPRESS;Initial Catalog=rvm;Persist Security Info=True;User ID=sa;Password=rvmbecse");
string str = "insert into multext values('"+TextBox1.Text +" , " + TextBox2.Text + "')";
con.Open();
SqlCommand cmd = new SqlCommand(str,con);
cmd.ExecuteNonQuery();
con.Close();
GridView1.DataBind();
//Response.Write("<script>alert('HI RVM Data inserted Successfully')</script>");
}

最新更新