COMO INSERIR CHECKBOX DINAMICAMENTE NO GRIDVIEW
Bom dia Pessoal,
Estou com um problema e não estou conseguindo resolver. Seguinte:
Tenho um gridview e estou tentando inserir um checkbox dinamicamente toda vez que o usuário clica no calendário, mas não esta funcionando. O problema é que não dá erro e também não aparece o checkbox na gridview. A coluna até é adicionada, mas o checkbox não aparece. Segue o código:
O erro é gerado na linha [Ô]grdDisponibilidade.DataBind();[Ô] na rotina CarregaGrid, o erro é o seguinte:
{[Ô]The data in the CheckBoxField [ô]Flag[ô] could not be parsed as a boolean value. Try using a BoundField instead.[Ô]}
Já tentei trocar para BoundField e nada da certo, tb já tentei passar valores fixos como [Ô]True ou False[Ô] e [Ô]1 ou 0[Ô] e tb não adiantou.
Alguem poderia me ajudar.
Obrigado
Estou com um problema e não estou conseguindo resolver. Seguinte:
Tenho um gridview e estou tentando inserir um checkbox dinamicamente toda vez que o usuário clica no calendário, mas não esta funcionando. O problema é que não dá erro e também não aparece o checkbox na gridview. A coluna até é adicionada, mas o checkbox não aparece. Segue o código:
protected void Calendar1_SelectionChanged(object sender, EventArgs e)
{
CarregaGrid();
}
private void CriaGrid()
{
grdDisponibilidade.Columns.Clear();
CheckBoxField colCheckBox = new CheckBoxField();
BoundField colGrid = new BoundField();
// Adiciona CheckBox
colCheckBox.DataField = [Ô]Flag[Ô];
colCheckBox.HeaderText = [Ô]Seleção[Ô];
colCheckBox.ItemStyle.Width = 30;
colCheckBox.InsertVisible = true;
colCheckBox.ShowHeader = true;
grdDisponibilidade.Columns.Add(colCheckBox);
colGrid.HeaderText = [Ô]Inicio[Ô];
colGrid.DataField = [Ô]H_Inicio[Ô];
colGrid.ReadOnly = true;
colGrid.ItemStyle.Width = 50;
grdDisponibilidade.Columns.Add(colGrid);
colGrid = new BoundField();
colGrid.HeaderText = [Ô]Fim[Ô];
colGrid.DataField = [Ô]H_Fim[Ô];
colGrid.ReadOnly = true;
colGrid.ItemStyle.Width = 50;
grdDisponibilidade.Columns.Add(colGrid);
}
private void CarregaGrid()
{
DataSet Ds = new DataSet();
DataTable Dt = new DataTable();
//Busca Diponibilidade
Ds = Disponibilidade(Calendar1.SelectedDate.Date);
//Carrega Crid
Dt.Columns.Add([Ô]Flag[Ô], typeof(CheckBox));
Dt.Columns.Add([Ô]H_Inicio[Ô], typeof(string));
Dt.Columns.Add([Ô]H_Fim[Ô], typeof(string));
Dt.Columns.Add([Ô]CodPedido[Ô], typeof(Int32));
Dt.Columns.Add([Ô]Observacao[Ô], typeof(string));
grdDisponibilidade.DataSource = null;
CriaGrid();
CheckBox chb = new CheckBox();
foreach (DataRow Dr in Ds.Tables[0].Rows)
{
DataRow DrGrid = Dt.NewRow();
DrGrid[0] = chb;
DrGrid[1] = Dr[[Ô]H_Inicio[Ô]].ToString();
DrGrid[2] = Dr[[Ô]H_Fim[Ô]].ToString();
DrGrid[3] = Dr[[Ô]CodPedido[Ô]];
DrGrid[4] = Dr[[Ô]Observacao[Ô]].ToString();
Dt.Rows.Add(DrGrid);
}
DataSet DsGrid = new DataSet();
DsGrid.Tables.Add(Dt);
grdDisponibilidade.DataSource = DsGrid.Tables[0];
grdDisponibilidade.DataBind();
}
O erro é gerado na linha [Ô]grdDisponibilidade.DataBind();[Ô] na rotina CarregaGrid, o erro é o seguinte:
{[Ô]The data in the CheckBoxField [ô]Flag[ô] could not be parsed as a boolean value. Try using a BoundField instead.[Ô]}
Já tentei trocar para BoundField e nada da certo, tb já tentei passar valores fixos como [Ô]True ou False[Ô] e [Ô]1 ou 0[Ô] e tb não adiantou.
Alguem poderia me ajudar.
Obrigado
Retificando
Isso acontece se na rotina CarregaGrid, eu não adicionar a linha DrGrid[0] = chb;
Citação:O problema é que não dá erro e também não aparece o checkbox na gridview. A coluna até é adicionada, mas o checkbox não aparece.
Isso acontece se na rotina CarregaGrid, eu não adicionar a linha DrGrid[0] = chb;
Boa tarde pessoal,
Bom depois de muito [Ô]penar[Ô], consegui inserir o o maldito checkbox no gridview e para isto tive que criar uma classe para que pudesse ser inserido o template. Peguei essa classe na net. Segue como ficou:
Classe:
Cria a Grid
Se servir para alguem, esta ai a resolução do problema.
Falow galera.
Bom depois de muito [Ô]penar[Ô], consegui inserir o o maldito checkbox no gridview e para isto tive que criar uma classe para que pudesse ser inserido o template. Peguei essa classe na net. Segue como ficou:
Classe:
public class GridViewTemplate: ITemplate
{
string _templateType;
string _columnName;
public GridViewTemplate(string tipo, string colname)
{
_templateType = tipo;
_columnName = colname;
}
void ITemplate.InstantiateIn(System.Web.UI.Control container)
{
switch (_templateType)
{
case [Ô]header[Ô]:
Label lbl = new Label();
lbl.Text = _columnName;
container.Controls.Add(lbl);
break;
case [Ô]checkbox[Ô]:
CheckBox chkColumn = new CheckBox();
chkColumn.ID = string.Format([Ô]chb{0}[Ô], _columnName);
container.Controls.Add(chkColumn);
break;
}
}
void tb1_DataBinding(object sender, EventArgs e)
{
CheckBox chbdata = (CheckBox)sender;
GridViewRow container = (GridViewRow)chbdata.NamingContainer;
object dataValue = DataBinder.Eval(container.DataItem, _columnName);
if (dataValue != DBNull.Value)
{
chbdata.Text = dataValue.ToString();
}
}
}
Cria a Grid
private void CriaGrid()
{
grdDisponibilidade.Columns.Clear();
BoundField colGrid = new BoundField();
TemplateField chbSelecao = new TemplateField();
chbSelecao.HeaderTemplate = new Classe.GridViewTemplate([Ô]header[Ô], [Ô][Ô]);
chbSelecao.ItemTemplate = new Classe.GridViewTemplate([Ô]checkbox[Ô], [Ô]Flag[Ô]);
chbSelecao.ItemStyle.Width = 30;
chbSelecao.ShowHeader = true;
chbSelecao.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
grdDisponibilidade.Columns.Add(chbSelecao);
colGrid.HeaderText = [Ô]Inicio[Ô];
colGrid.DataField = [Ô]H_Inicio[Ô];
colGrid.ReadOnly = true;
colGrid.ItemStyle.Width = 50;
colGrid.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
grdDisponibilidade.Columns.Add(colGrid);
colGrid = new BoundField();
colGrid.HeaderText = [Ô]Fim[Ô];
colGrid.DataField = [Ô]H_Fim[Ô];
colGrid.ReadOnly = true;
colGrid.ItemStyle.Width = 50;
colGrid.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
grdDisponibilidade.Columns.Add(colGrid);
colGrid = new BoundField();
colGrid.HeaderText = [Ô]Pedido[Ô];
colGrid.DataField = [Ô]CodPedido[Ô];
colGrid.ReadOnly = true;
colGrid.ItemStyle.Width = 50;
colGrid.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
grdDisponibilidade.Columns.Add(colGrid);
colGrid = new BoundField();
colGrid.HeaderText = [Ô]Observação[Ô];
colGrid.DataField = [Ô]Observacao[Ô];
colGrid.ReadOnly = true;
colGrid.ItemStyle.Width = 430;
colGrid.ItemStyle.HorizontalAlign = HorizontalAlign.Left;
grdDisponibilidade.Columns.Add(colGrid);
grdDisponibilidade.AutoGenerateColumns = false;
}
Se servir para alguem, esta ai a resolução do problema.
Falow galera.
Tópico encerrado , respostas não são mais permitidas