2015-03-30 2 views
1

В представлении «Сетка» у меня есть одно поле «Элементы». Я хочу сгруппировать все значения группы элементов вместе в строке gridview с заголовком как Itemgroup. Как текст заголовка как значения группы элементов, за которым следуют его значения.Как сгруппировать определенный столбец в виде сетки

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" HorizontalAlign="Center"> 
    <Columns> 
     <asp:TemplateField HeaderText="Item Name"> 
      <ItemTemplate> 
       <asp:Label ID="lblName" runat="server" Text='<%# Eval("TestItemName") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Items Group"> 
      <ItemTemplate> 
       <asp:Label ID="lblGroup" runat="server" Text='<%# Eval("TestItemGroup") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Value"> 
      <ItemTemplate> 
       <asp:TextBox ID="txtItemGroup" runat="server" Text='<%# Eval("ItemGroup") %>'></asp:TextBox> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField Visible="false"> 
      <ItemTemplate> 
       <asp:Label ID="lblGroup12" runat="server" Text='<%# Eval("TestItemID") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText=""> 
      <ItemTemplate> 
       <asp:Label ID="lblItemValue" runat="server" Text='<%# Eval("TestItemValues") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Default Values"> 
      <ItemTemplate> 
       <asp:Label ID="lblDefaultValues" runat="server" Text='<%# Eval("DefaultValues") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

Binding Сетка вид в .cs:

 int ID = Convert.ToInt32(txtID.Text); 
     sqlstr = "select * from Test_Items where TestID = '" + ID + "'"; 
     SqlDataAdapter da = new SqlDataAdapter(sqlstr, con); 
     DataSet ds = new DataSet(); 
     da.Fill(ds); 
     if (ds != null && ds.Tables[0].Rows.Count > 0) 
     { 
      GridView1.DataSource = ds; 
      GridView1.DataBind(); 
      btnSend1.Visible = true; 
     } 
     else 
     { 
      ScriptManager.RegisterStartupScript(this, GetType(), "", "alert('Invalid ID (or) No Data to Display..!');", true); 
     } 

Для лучшего понимания Ex: http://www.pathology-software.com/images/pathology-software/patholgy-screenshot7.jpg

Спасибо заранее

ответ

0

<asp:Literal ID="litDataLoader" runat="server"> 

     </asp:Literal> 
     <asp:GridView ID="gvTemp" runat="server" AutoGenerateColumns="false" BorderWidth="0" ShowHeader="false" ShowFooter="false"> 
      <Columns> 
       <asp:TemplateField ControlStyle-Width="200px"> 
        <ItemTemplate> 
         <asp:Label ID="lblTestItemName" runat="server" Text='<%#Eval("TestItemName") %>'></asp:Label> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField ControlStyle-Width="220px"> 
        <ItemTemplate> 
         <asp:Label ID="lblTestItemValues" runat="server" Text='<%#Eval("Itm") %>'></asp:Label> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField ControlStyle-Width="200px"> 
        <ItemTemplate> 
         <asp:Label ID="lblDefaultValues" runat="server" Text='<%#Eval("DefaultValues") %>'></asp:Label> 
        </ItemTemplate> 
       </asp:TemplateField> 
      </Columns> 
     </asp:GridView> 

Binding вид сетки в .cs:

public override void VerifyRenderingInServerForm(Control control) 
    { 
     /* Verifies that the control is rendered */ 
    } 
    private void bindData() 
    { 

     string Query = "select TestItemID,TestItemName,TestItemValues,DefaultValues,TestID,ItemGroup,isnull(TestItemGroup,'-') as TestItemGroup, (ItemGroup + ' ' + TestItemValues) as Itm from Test_Items where TestID = '" + ViewState["id"].ToString() + "'"; 
     SqlDataAdapter da = new SqlDataAdapter(Query, con); 
     DataTable dt = new DataTable(); 
     da.Fill(dt); 
     var rows = dt.AsEnumerable().Select(s => new { id = s.Field<string>("TestItemGroup"), }).Distinct().ToList(); 
     int count = rows.Count; 
     if (dt.Rows.Count > 0) 
     { 
      StringBuilder build = new StringBuilder(); 
      foreach (var row in rows) 
      { 
       string Name = row.id != "-" ? row.id : " "; 
       build.Append("<b>" + Name + "</b>"); 
       DataTable dts = new DataTable(); 
       dts = dt.Select("TestItemGroup = '" + row.id + "'").CopyToDataTable(); 
       gvTemp.Visible = true; 

       gvTemp.DataSource = dts; 
       gvTemp.DataBind(); 
       StringWriter sw = new StringWriter(); 
       HtmlTextWriter hw = new HtmlTextWriter(sw); 
       gvTemp.RenderControl(hw); 
       string gridHTML = sw.ToString().Replace("\"", "'").Replace(System.Environment.NewLine, ""); 
       build.Append(gridHTML); 
       gvTemp.Visible = false; 
      } 
      litDataLoader.Text = build.ToString(); 
     } 
    } 
0

Вы можете вводить необходимые строки разделителей путем добавления « разделитель записывает "в источник данных, прежде чем привязывать его к GridView.

Вот пример, который я наткнулся:

protected override void Render(HtmlTextWriter writer) 
{ 
    string lastSubCategory = String.Empty; 
    Table gridTable = (Table)gvProducts.Controls[0]; 
    foreach (GridViewRow gvr in gvProducts.Rows) 
    { 
     HiddenField hfSubCategory = gvr.FindControl("hfSubCategory") as 
            HiddenField; 
     string currSubCategory = hfSubCategory.Value; 
     if (lastSubCategory.CompareTo(currSubCategory) != 0) 
     { 
      int rowIndex = gridTable.Rows.GetRowIndex(gvr); 
      // Add new group header row 
      GridViewRow headerRow = new GridViewRow(rowIndex, rowIndex, 
       DataControlRowType.DataRow, DataControlRowState.Normal); 
      TableCell headerCell = new TableCell(); 
      headerCell.ColumnSpan = gvProducts.Columns.Count; 
      headerCell.Text = string.Format("{0}:{1}", "SubCategory", 
              currSubCategory); 
      headerCell.CssClass = "GroupHeaderRowStyle"; 
      // Add header Cell to header Row, and header Row to gridTable 
      headerRow.Cells.Add(headerCell); 
      gridTable.Controls.AddAt(rowIndex, headerRow); 
      // Update lastValue 
      lastSubCategory = currSubCategory; 
     } 
    } 
    base.Render(writer); 
} 

FULL ARTICLE

Смежные вопросы