2013-09-09 4 views
1

моего DataTable формируется следующим образомдинамических привязки данных GridView

DataTable dtFinalData = new DataTable(); 
     //Adding columns for BR details 
     dtFinalData.Columns.Add("SupId", typeof(string)); 
     dtFinalData.Columns.Add("SupName", typeof(string)); 

     DateTime dt = DateTime.Today; 
     int num = DateTime.DaysInMonth(DateTime.Today.Year, DateTime.Today.Month); 

     //--> adding columns for date part (1-31) 
     for (int i = 1; i < num + 1; i++) 
     { 
      dtFinalData.Columns.Add(i.ToString(), typeof(bool)); 
     } 
     //<-- adding columns for date part (1-31) 


     #endregion 

     #region Fill dtFinalData 

     //--> Looping each BR from tblBrList 
     foreach (DataRow BrRow in dtBrList.Rows) 
     { 
      DataRow dr = dtFinalData.NewRow(); 

      int SupId = Convert.ToInt32(BrRow[0]); //retrieve BR ID from dtBrList 
      String supName = BrRow[1].ToString(); //retreive Supervisor name from dtBrList 

      dr["SupId"] = SupId.ToString(); 
      dr["SupName"] = supName; 

      for (int i = 1; i < num + 1; i++) 
      { 

       DateTime dtRunningDate = new DateTime(2013, 5, i); 

       //select BR_SUP_CODE, 
       DataRow[] drAttendance = dtAttendance.Select("BR_SUP_CODE=" + SupId + " AND SMS_DATE=#" + dtRunningDate + "#", string.Empty); 
       if (drAttendance.Length == 1) 
       { 
        //CheckBox chkbx = new CheckBox(); 
        //chkbx.Checked = true; 
        dr[i.ToString()] = true; 
       } 
       else 
       { 
        //CheckBox chkbx = new CheckBox(); 
        //chkbx.Checked = false; 
        dr[i.ToString()] = false; 
       } 
      } 

      dtFinalData.Rows.Add(dr); 
     } 
     //<-- Looping each BR from tblBrList 


     #endregion 

     GridView1.DataSource = dtFinalData; 
     GridView1.DataBind(); 

Теперь я хочу, чтобы добавить изображение проверили вместо истинных и непроверенных изображений вместо false.how, чтобы связать вид сетки динамически таким образом, что вместо отключения флажок Я хочу вставить два типа изображения?

+1

Вы хотите отобразить строку только с изображением ?? Пожалуйста, покажите свою GridView Markup слишком –

+1

хотите динамически создать столбец сетки – decoder

ответ

1

Ваша деталь DataTable прекрасна и продолжает добавлять текст True/False в соответствии с логикой. Теперь вы должны обработать часть GridView. Итак, определите обработчик событий для OnRowDataBound событие GridView.

Только в этом случае проверьте свойство ячеек Text, и если True/False, очистите ячейки и добавьте требуемое изображение.

<asp:GridView ID="GridView1" OnRowDataBound="GridView1_RowDataBound" ... /> 

И ваш обработчик события будет иметь код, как показано ниже:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
      Image chkImage = new Image(); 
      chkImage.ImageUrl="~/images/Checked.png"; 
      Image UnchkImage = new Image(); 
      UnchkImage.ImageUrl = "~/images/UnChecked.png"; 

    if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
     // We will start from 3rd cell because the first 2 cells are 
     // for SupID & SupName, where we don't need to place images 
      for (int cellIndex = 2; cellIndex < GridView1.Columns.Count; cells++) 
      { 
       // Add Checked Image when cell text is true 
       if (e.Row.Cells[cellIndex].Text == "true") 
       { 
        // clear the cell and add only the image 
        e.Row.Cells[cellIndex].Controls.Clear(); 
        e.Row.Cells[cellIndex].Controls.Add(chkImage); 
       } 
       // Add Unchecked Image when cell text is false 
       if (e.Row.Cells[cellIndex].Text == "false") 
       { 
        // clear the cell and add only the image 
        e.Row.Cells[cellIndex].Controls.Clear(); 
        e.Row.Cells[cellIndex].Controls.Add(unchkImage); 
       } 
      } 
     } 
}