2015-05-23 3 views
4

Я хочу скрыть столбец gridview динамически, если нет данных. Существует столбец т.е. Приложение, которое я хочу, чтобы скрыть, но, к сожалению, есть что-то неправильное в кодировании, но я не могу найти его Ниже мой кодКак скрыть столбец Gridview, когда нет данных?

<asp:GridView ID="GridView1" CssClass="attengrid" runat="server" Width="100%" AutoGenerateColumns="false" 
         ShowHeader="true" onrowdatabound="GridView1_RowDataBound"> 
         <Columns> 
          <asp:BoundField DataField="EmpName" HeaderText="Emp.Name"></asp:BoundField> 
          <asp:BoundField DataField="DOB" HeaderText="DOB"></asp:BoundField> 
          <asp:BoundField DataField="Qualification" HeaderText="Designation"></asp:BoundField> 
          <asp:BoundField DataField="HomePlace" HeaderText="Home Town"></asp:BoundField> 
          <asp:BoundField DataField="DOJInGovrService" HeaderText="DOJ In Gov.Service"></asp:BoundField> 
          <asp:BoundField DataField="DOJInSamvarg" HeaderText="DOJ In Samvarg"></asp:BoundField> 
          <asp:BoundField DataField="DOJInCurrentOff" HeaderText="DOJ In Current Off."></asp:BoundField> 
          <asp:BoundField DataField="CurrentOfficePlace" HeaderText="Current Office"></asp:BoundField> 
          <asp:BoundField DataField="class" HeaderText="Category"></asp:BoundField> 
          <asp:BoundField DataField="Attachment" HeaderText="Attachment"></asp:BoundField> 
         </Columns> 
        </asp:GridView> 

Ниже .aspx.cs

protected void btnSearch_Click(object sender, EventArgs e) 
{ 

    dbAccess.execute("select ED.class,ED.CurrentOfficePlace,ED.DOB,ED.DOJInCurrentOff,ED.DOJInGovrService,ED.DOJInSamvarg,ED.EmpName,ED.HomePlace,ED.Qualification, ED.Attachment from tbl_EmplyeesBiodata ED where ED.CurrentOfficePlace='" + ddlCurrentPlacePosting.SelectedItem.Text + "'", DBAccess.SQLType.IS_QUERY); 
    DataTable dt = dbAccess.records1(); 
    if (dt.Rows.Count > 0) 
    { 
     Label8.Text = dt.Rows.Count.ToString(); 
     GridView1.DataSource = dt; 
     GridView1.DataBind(); 
     lblmsg.Style.Add("display", "block"); 
     lblmsg.Attributes.Add("class", "success"); 
     lblmsg.InnerHtml = closediv + "Case Found"; 
     tdnotice.Style.Add("display", "block"); 

    } 
    else 
    { 

     lblmsg.Style.Add("display", "block"); 
     lblmsg.Attributes.Add("class", "error"); 
     lblmsg.InnerHtml = closediv + "No Case Found"; 
     tdnotice.Style.Add("display", "none"); 

    } 
} 


protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     string val = e.Row.Cells[9].ToString(); 
     if (string.IsNullOrEmpty(val)) 
     { 
      GridView1.Columns[9].Visible = false;  
     } 

    } 
} 

Этот код не работает, он все еще показывает колонку , пожалуйста, помогите

ответ

0

Вы не можете этого сделать. Это аналогично удалению определенных столбцов, где люди не присутствуют в сборке. Это испортит образование.

GridView получить визуализированный как таблица (HTML). Если вы View Source, вы можете увидеть таблицу с 10 td за каждые tr. Это означает, что 10 столбцов в строке. Теперь вы хотите скрыть один столбец в некоторых строках условно.

Теперь, если у вас нет данных ни в одной из строк вашего 10-го столбца, вы можете скрыть это. Но RowDataBound для этого не является событием. Сделайте это после вашего GridView1.DataBind().

0

Если вы установите свойство Visible перед вызовом DataBind, оно также уменьшит ViewState, поскольку значения никогда не заселяются в невидимые столбцы.

protected void btnSearch_Click(object sender, EventArgs e) { 
// ..... 
bool isBlank = true; 
foreach (DataRow dr in dt.Rows) { // for each row in the data table 
    if (!dr.item("Attachment") == System.DbNull.Value) { // if we find a non null value 
     isBlank = false; // show the column in the gridview 
     break; // then stop checking for nulls 
    } 
} 
GridView1.Columns(9).Visible = !isBlank; 
GridView1.DataBind(); 
}