能实现,但很麻烦
我一般是把相应数据提出来,在TextBox中修改

解决方案 »

  1.   

    分页:
    http://blog.csdn.net/allenting/archive/2005/01/27/271073.aspx
    datagrid行排序和筛选 :
    http://blog.csdn.net/allenting/archive/2005/01/27/271072.aspx
    datagrid的自定义和隐藏栏:
    http://blog.csdn.net/allenting/archive/2005/01/27/271069.aspx
    datagrid修改:
    <form runat="server">  <ASP:DataGrid id="MyDataGrid" runat="server"
           CellPadding = "2"
           EditItemStyle-BackColor="yellow"
           DataKeyField="ISBN"
           OnEditCommand="DoItemEdit"
           OnUpdateCommand="DoItemUpdate"
           OnCancelCommand="DoItemCancel"
           AutoGenerateColumns="False">    <Columns>      <ASP:BoundColumn DataField="ISBN" HeaderText="ISBN" ReadOnly="True" />      <ASP:TemplateColumn HeaderText="Title">
            <ItemTemplate>
              <ASP:Label Text='<%# DataBinder.Eval(Container.DataItem, "Title") %>' runat="server" />
            </ItemTemplate>
            <EditItemTemplate>
              <ASP:TextBox id="txtTitle" Size="60"
                   Text='<%# DataBinder.Eval(Container.DataItem, "Title") %>' runat="server" />
            </EditItemTemplate>
          </ASP:TemplateColumn>      <ASP:BoundColumn DataField="PublicationDate" HeaderText="Published" />      <ASP:EditCommandColumn
               EditText="Edit"
               CancelText="Cancel"
               UpdateText="Update" />    </Columns>  </ASP:DataGrid></form><!---------------------------------------------------------------------------><script language="C#" runat="server"> void Page_Load(Object sender, EventArgs e)
    {
    if (!Page.IsPostBack)
    BindDataGrid(); // create data set and bind to grid control
    }
    void DoItemEdit(Object objSource, DataGridCommandEventArgs objArgs)
    {
    lblSQL.Text = ""; // clear text from label that shows SQL statement // set the EditItemIndex property of the grid to this item's index
    MyDataGrid.EditItemIndex = objArgs.Item.ItemIndex;
    BindDataGrid(); // bind the data and display it
    }
    void DoItemUpdate(Object objSource, DataGridCommandEventArgs objArgs)
    {
    // get a reference to the title and publication date text boxes
    TextBox objTitleCtrl = (TextBox)objArgs.Item.FindControl("txtTitle");
    TextBox objPubDateCtrl = (TextBox)objArgs.Item.Cells[2].Controls[0]; // create a suitable SQL statement and execute it
    string strSQL = "UPDATE Booklist SET Title='" + objTitleCtrl.Text + "', "
    + "PublicationDate='" + objPubDateCtrl.Text + "' "
    + "WHERE ISBN='" + MyDataGrid.DataKeys[objArgs.Item.ItemIndex] + "'";
    ExecuteSQLStatement(strSQL); // set EditItemIndex property of grid to -1 to switch out of Edit mode
    MyDataGrid.EditItemIndex = -1;
    BindDataGrid(); // bind the data and display it
    }
    void DoItemCancel(Object objSource, DataGridCommandEventArgs objArgs)
    {
    // set EditItemIndex property of grid to -1 to switch out of Edit mode
    MyDataGrid.EditItemIndex = -1;
    BindDataGrid(); // bind the data and display it
    }
    void ExecuteSQLStatement(string strSQL)
    {
    // this is where the SQL statement would be executed against the
    // original data source. In this example, we're simply displaying
    // the statement in a Label on the page
    lblSQL.Text = "<b>The SQL statement that would be executed is:</b><br />" + strSQL;
    }
    void BindDataGrid()
    {
    // get connection string from ..\global\connect-strings.ascx user control
    string strConnect = ctlConnectStrings.OLEDBConnectionString; // create a SQL statement to select some rows from the database
    string strSelect = "SELECT * FROM BookList WHERE ISBN LIKE '%18610025%'"; // create a variable to hold an instance of a DataReader object
    OleDbDataReader objDataReader; try
    {
    // create a new Connection object using the connection string
    OleDbConnection objConnect = new OleDbConnection(strConnect); // open the connection to the database
    objConnect.Open(); // create a new Command using the connection object and select statement
    OleDbCommand objCommand = new OleDbCommand(strSelect, objConnect); // execute the SQL statement against the command to get the DataReader
    objDataReader = objCommand.ExecuteReader();
    }
    catch (Exception objError)
    {
    // display error details
    outError.InnerHtml = "<b>* Error while accessing data</b>.<br />"
    + objError.Message + "<br />" + objError.Source + "<p />";
    return; //  and stop execution
    } // set the DataSource property and bind the grid
    MyDataGrid.DataSource = objDataReader;
    MyDataGrid.DataBind();
    }</script>
      

  2.   

    winform的
    http://community.csdn.net/Expert/topic/3736/3736668.xml?temp=.3619806
      

  3.   

    对于一个主从界面,你们也是用textbox吗?
      

  4.   

    DataGrid里数据不好验证他的完整性!还是提出来处理比较好!就用他来显示数据就行了!
      

  5.   

    DataGrid 不是DataWindow 如果在最后保存的时候验证还行、如果要用户数据立刻验证那种
    好像不行、
    其实.net的对象基本上是离散的、不像PB 几乎 DataWindow 就可以主宰一切了、
    想打造 比较完美的操作比较 
    各种对象相互配合如:Grid //最终显示到客户的控件DataView //[相当于数据库中的试图]可以对数据进行排序、筛选等操作 一个DataTable 可对应多个 View
    DataSet //[相当于一个数据库]
    DataTable //相当于一个表
    BindingManagerBase //管理绑定到相同数据源和数据成员的所有 Binding 对象。
    如绑定后的数据现在所在的行, 还有行移动等一些很有用的事件都在在这里.当然进行一系列操作后还需要将数据更新回数据库
    需要使用
    [Ole|SQL|Oracle]Command //基本封装 sql 语句的操作
    [Ole|SQL|Oracle]DataAdapter //使用4个commad 包括更新插入修改等数据库操作
    MSDN 里有很多例子.下面就是一个ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/vbcon/html/vbwlkwalkthroughdisplayingdatafromsingletableinwindowsform.htm或在msdn 搜索  窗体中的简单数据访问下面有个例子(copy 后保存成 .eml文件用  Outlook Express 开就好了)Subject: Fw: 
    Date: Fri, 28 Jan 2005 23:26:00 +0800
    MIME-Version: 1.0
    Content-Type: multipart/mixed;
    boundary="----=_NextPart_000_0003_01C50590.C12DF050"
    X-Priority: 3
    X-MSMail-Priority: Normal
    X-Unsent: 1
    X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1441This is a multi-part message in MIME format.------=_NextPart_000_0003_01C50590.C12DF050
    Content-Type: text/plain;
    charset="gb2312"
    Content-Transfer-Encoding: base64DQotLS0tLSBPcmlnaW5hbCBNZXNzYWdlIC0tLS0tIA0KU2VudDogRnJpZGF5LCBKYW51YXJ5IDI4
    LCAyMDA1IDExOjI1IFBNDQoNCg==------=_NextPart_000_0003_01C50590.C12DF050
    Content-Type: application/octet-stream;
    name="Form3.rar"
    Content-Transfer-Encoding: base64
    Content-Disposition: attachment;
    filename="Form3.rar"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------=_NextPart_000_0003_01C50590.C12DF050--
      

  6.   

    to:yanyzty(歪打正着),把数据提到textbox里面还是比较好的,但这个提取过程应该怎么做啊?
      

  7.   

    here
    http://www.syncfusion.com/FAQ/WinForms/FAQ_c44c.asp
      

  8.   

    可以这么做:
    在dataGrid的双击事件dataGrid1_DoubleClick中写如下代码  //第一列的数据
    this.textBox1.Text = this.dataGrid1[this.dataGrid1.CurrentRowIndex,0].ToString(); 
       //第二列的数据
    this.textBox2.Text = this.dataGrid1[this.dataGrid1.CurrentRowIndex,1].ToString();
    and so on~~ 然后双击dataGrid1的行首部分  即可取出dataGrid的单元格的值
      

  9.   

    private void dataGridView_CurrentCellChanged(object sender, System.EventArgs e)
    {

    string temp = dataGridView[Convert.ToInt32(dataGridView.CurrentCell.RowNumber),0].ToString();
    DataAccess data = new DataAccess();
    //判断是否点中的是CheckBox列,以保证其值正确更改
    if(dataGridView.CurrentCell.ColumnNumber == 12)
    {
    //判断CheckBox单元格的值,并根据其值更新数据库
    if(dataGridView[Convert.ToInt32(dataGridView.CurrentCell.RowNumber),12].ToString() == "False")
    {
    dataGridView[Convert.ToInt32(dataGridView.CurrentCell.RowNumber),12] = true;
    string query_sql = "update accounttype set accflag = '1' where id = '" + temp + "'";
    data.ExecuteSQL(query_sql);
    }
    else if(dataGridView[Convert.ToInt32(dataGridView.CurrentCell.RowNumber),12].ToString() == "True")
    {
    dataGridView[Convert.ToInt32(dataGridView.CurrentCell.RowNumber),12] = false;
    string query_sql = "update accounttype set accflag = '0' where id = '" + temp + "'";
    data.ExecuteSQL(query_sql);
    }
    }
    else
    {
    //选中的不是CheckBox列就跳出此过程
    return;
    }
    }
    取值是一样的,你看看吧