Using a CheckBox in a DataGrid to Update a Bit Type Data Field

Discussion in 'ASP .Net' started by Nu2ASP.NET, Nov 17, 2005.

  1. Nu2ASP.NET

    Nu2ASP.NET Guest

    What I am trying to do is essentially 'flip' the bits, when the user
    clicks in the checkbox. For example, if the CheckBox appears checked,
    and the user un-checks it, I want the underlying data field to change
    from a "1" to a "0" (and vica versa).

    I have the bindings worked out, I just can't figure out how to do the
    update.

    Here is my source:

    <%@ Page language="c#" Codebehind="WebForm1.aspx.cs"
    AutoEventWireup="false" Inherits="CheckBoxTest.WebForm1" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    <HEAD>
    <title>WebForm1</title>
    <meta content="Microsoft Visual Studio .NET 7.1"
    name="GENERATOR">
    <meta content="C#" name="CODE_LANGUAGE">
    <meta content="JavaScript" name="vs_defaultClientScript">
    <meta content="http://schemas.microsoft.com/intellisense/ie5"
    name="vs_targetSchema">
    </HEAD>
    <body MS_POSITIONING="GridLayout">
    <form id="Form1" method="post" runat="server">
    <ASP:DATAGRID id="MyDataGrid" runat="server"
    AutoGenerateColumns="false"
    HeaderStyle-BackColor="#aaaadd" Font-Size="8pt"
    Font-Name="Verdana"
    CellSpacing="0" CellPadding="3" ShowFooter="false"
    BorderColor="black"
    BackColor="#ccccff" Width="800"
    OnItemDataBound="MyDataGrid_ItemDataBound">
    <Columns>
    <asp:BoundColumn HeaderText="au_id" DataField="au_id"/>
    <asp:BoundColumn HeaderText="au_lname"
    DataField="au_lname" />
    <asp:TemplateColumn HeaderText="au_fname">
    <ItemTemplate>
    <asp:Label id="au_fname" Text='<%#
    DataBinder.Eval(Container.DataItem,
    "au_fname") %>' runat="server" />
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:BoundColumn HeaderText="city" DataField="city" />
    <asp:TemplateColumn HeaderText="contract">
    <HeaderTemplate>
    <input type="checkbox" id="checkAll" runat="server">
    Contracts
    </HeaderTemplate>
    <ItemTemplate>
    <asp:CheckBox id="contract" AutoPostBack=True
    runat="server"></asp:CheckBox>
    </ItemTemplate>
    </asp:TemplateColumn>
    </Columns>
    </ASP:DATAGRID></form>
    </body>
    </HTML>

    Code behind:


    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Data.SqlClient;

    namespace CheckBoxTest
    {
    /// <summary>
    /// Summary description for WebForm1.
    /// </summary>

    public class WebForm1 : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.DataGrid MyDataGrid;
    SqlConnection myConnection;



    private void Page_Load(object sender, System.EventArgs e)
    {
    myConnection = new SqlConnection

    ("Server=localhost;uid=sa;pwd=preview;database=pubs");


    if(!IsPostBack)
    BindGrid();
    }

    public void MyDataGrid_ItemDataBound(object sender,
    System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType ==
    ListItemType.AlternatingItem)
    {
    CheckBox cb = e.Item.FindControl("contract")as CheckBox;
    DataRowView drv = (DataRowView)e.Item.DataItem;

    if(cb != null && !drv.Row.IsNull("contract"))
    {
    cb.Checked = (bool)drv["contract"];
    }
    }

    }


    public void BindGrid()
    {
    SqlDataAdapter dAdapter = new SqlDataAdapter ("SELECT * FROM
    authors ",
    myConnection);
    DataSet dSet= new DataSet();
    dAdapter.Fill(dSet, "authors");
    MyDataGrid.DataSource = dSet.Tables["authors"].DefaultView;
    MyDataGrid.DataBind();
    }


    #region Web Form Designer generated code

    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: This call is required by the ASP.NET Web Form
    Designer.
    //

    InitializeComponent();
    base.OnInit(e);


    }


    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>

    private void InitializeComponent()
    {
    this.MyDataGrid.ItemDataBound += new
    System.Web.UI.WebControls.DataGridItemEventHandler
    (this.MyDataGrid_ItemDataBound);
    this.Load += new System.EventHandler(this.Page_Load);
    }

    #endregion
    }

    }

    I am using a SQL 2000 database (note I'm using the sample pubs database
    above).

    As always, help is greatly appreciated!!!
     
    Nu2ASP.NET, Nov 17, 2005
    #1
    1. Advertising

  2. add an event handler to your checkbox: OnCheckedChanged ="MyFunction" and in
    the method that handles the event do the opposite of what you did in the
    MyDataGrid_ItemDataBound (i.e. drv["contract"]=cb.Checked ;)

    I have a complete sample code for a similar usage (to delete instead of
    update):http://www.societopia.net/Samples/DataGrid_ChildControlsEvents.aspx
    --
    [note: if this post answers your question, you can mark it as an answer
    using the web-based newsreader functions]
    -----
    HTH,
    Phillip Williams
    http://www.societopia.net
    http://www.webswapp.com


    "Nu2ASP.NET" wrote:

    > What I am trying to do is essentially 'flip' the bits, when the user
    > clicks in the checkbox. For example, if the CheckBox appears checked,
    > and the user un-checks it, I want the underlying data field to change
    > from a "1" to a "0" (and vica versa).
    >
    > I have the bindings worked out, I just can't figure out how to do the
    > update.
    >
    > Here is my source:
    >
    > <%@ Page language="c#" Codebehind="WebForm1.aspx.cs"
    > AutoEventWireup="false" Inherits="CheckBoxTest.WebForm1" %>
    > <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    > <HTML>
    > <HEAD>
    > <title>WebForm1</title>
    > <meta content="Microsoft Visual Studio .NET 7.1"
    > name="GENERATOR">
    > <meta content="C#" name="CODE_LANGUAGE">
    > <meta content="JavaScript" name="vs_defaultClientScript">
    > <meta content="http://schemas.microsoft.com/intellisense/ie5"
    > name="vs_targetSchema">
    > </HEAD>
    > <body MS_POSITIONING="GridLayout">
    > <form id="Form1" method="post" runat="server">
    > <ASP:DATAGRID id="MyDataGrid" runat="server"
    > AutoGenerateColumns="false"
    > HeaderStyle-BackColor="#aaaadd" Font-Size="8pt"
    > Font-Name="Verdana"
    > CellSpacing="0" CellPadding="3" ShowFooter="false"
    > BorderColor="black"
    > BackColor="#ccccff" Width="800"
    > OnItemDataBound="MyDataGrid_ItemDataBound">
    > <Columns>
    > <asp:BoundColumn HeaderText="au_id" DataField="au_id"/>
    > <asp:BoundColumn HeaderText="au_lname"
    > DataField="au_lname" />
    > <asp:TemplateColumn HeaderText="au_fname">
    > <ItemTemplate>
    > <asp:Label id="au_fname" Text='<%#
    > DataBinder.Eval(Container.DataItem,
    > "au_fname") %>' runat="server" />
    > </ItemTemplate>
    > </asp:TemplateColumn>
    > <asp:BoundColumn HeaderText="city" DataField="city" />
    > <asp:TemplateColumn HeaderText="contract">
    > <HeaderTemplate>
    > <input type="checkbox" id="checkAll" runat="server">
    > Contracts
    > </HeaderTemplate>
    > <ItemTemplate>
    > <asp:CheckBox id="contract" AutoPostBack=True
    > runat="server"></asp:CheckBox>
    > </ItemTemplate>
    > </asp:TemplateColumn>
    > </Columns>
    > </ASP:DATAGRID></form>
    > </body>
    > </HTML>
    >
    > Code behind:
    >
    >
    > using System;
    > using System.Collections;
    > using System.ComponentModel;
    > using System.Data;
    > using System.Drawing;
    > using System.Web;
    > using System.Web.SessionState;
    > using System.Web.UI;
    > using System.Web.UI.WebControls;
    > using System.Web.UI.HtmlControls;
    > using System.Data.SqlClient;
    >
    > namespace CheckBoxTest
    > {
    > /// <summary>
    > /// Summary description for WebForm1.
    > /// </summary>
    >
    > public class WebForm1 : System.Web.UI.Page
    > {
    > protected System.Web.UI.WebControls.DataGrid MyDataGrid;
    > SqlConnection myConnection;
    >
    >
    >
    > private void Page_Load(object sender, System.EventArgs e)
    > {
    > myConnection = new SqlConnection
    >
    > ("Server=localhost;uid=sa;pwd=preview;database=pubs");
    >
    >
    > if(!IsPostBack)
    > BindGrid();
    > }
    >
    > public void MyDataGrid_ItemDataBound(object sender,
    > System.Web.UI.WebControls.DataGridItemEventArgs e)
    > {
    > if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType ==
    > ListItemType.AlternatingItem)
    > {
    > CheckBox cb = e.Item.FindControl("contract")as CheckBox;
    > DataRowView drv = (DataRowView)e.Item.DataItem;
    >
    > if(cb != null && !drv.Row.IsNull("contract"))
    > {
    > cb.Checked = (bool)drv["contract"];
    > }
    > }
    >
    > }
    >
    >
    > public void BindGrid()
    > {
    > SqlDataAdapter dAdapter = new SqlDataAdapter ("SELECT * FROM
    > authors ",
    > myConnection);
    > DataSet dSet= new DataSet();
    > dAdapter.Fill(dSet, "authors");
    > MyDataGrid.DataSource = dSet.Tables["authors"].DefaultView;
    > MyDataGrid.DataBind();
    > }
    >
    >
    > #region Web Form Designer generated code
    >
    > override protected void OnInit(EventArgs e)
    > {
    > //
    > // CODEGEN: This call is required by the ASP.NET Web Form
    > Designer.
    > //
    >
    > InitializeComponent();
    > base.OnInit(e);
    >
    >
    > }
    >
    >
    > /// <summary>
    > /// Required method for Designer support - do not modify
    > /// the contents of this method with the code editor.
    > /// </summary>
    >
    > private void InitializeComponent()
    > {
    > this.MyDataGrid.ItemDataBound += new
    > System.Web.UI.WebControls.DataGridItemEventHandler
    > (this.MyDataGrid_ItemDataBound);
    > this.Load += new System.EventHandler(this.Page_Load);
    > }
    >
    > #endregion
    > }
    >
    > }
    >
    > I am using a SQL 2000 database (note I'm using the sample pubs database
    > above).
    >
    > As always, help is greatly appreciated!!!
    >
    >
     
    =?Utf-8?B?UGhpbGxpcCBXaWxsaWFtcw==?=, Nov 17, 2005
    #2
    1. Advertising

  3. Nu2ASP.NET

    Nu2ASP.NET Guest

    Thank You Phillip!

    Your example is a very good one: I am, however, having trouble with the
    syntax for the update query. I am trying to update the contract field
    (bit data type) in the pubs database. I made several attempts, using the
    SQL Query analyzer, but couldn't get the syntax right. Could you
    possibly provide me with a sample? I would really appreciate it.



    --
    Sent via .NET Newsgroups
    http://www.dotnetnewsgroups.com
     
    Nu2ASP.NET, Nov 18, 2005
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. hazz
    Replies:
    4
    Views:
    3,889
  2. Replies:
    3
    Views:
    1,851
    Timothy Bendfelt
    Jan 19, 2007
  3. akineko
    Replies:
    7
    Views:
    1,421
    akineko
    Dec 22, 2008
  4. Joey Pang
    Replies:
    4
    Views:
    563
    Joey Pang
    Jun 13, 2005
  5. .NETn00b
    Replies:
    0
    Views:
    211
    .NETn00b
    Nov 19, 2005
Loading...

Share This Page