5.30 How can I prevent the Enter key from moving to the next cell when the user is actively editing the cell and presses Enter?     Override the method ProcessKeyPreview in your DataGrid. 
  
protected override bool ProcessKeyPreview(ref System.Windows.Forms.Message m) 
 

 
     Keys keyCode = (Keys)(int)m.WParam & Keys.KeyCode; 
 
     if((m.Msg == WM_KEYDOWN || m.Msg == WM_KEYUP) 
 
          && keyCode == Keys.Enter ) 
 
          return false; 
 
     return true; 
 
}
 

解决方案 »

  1.   

    哦 忘了说了 是web form!
      

  2.   

    那恐怕得自己添加事件了,判断用户输入
    datagrid中加一空行,这个无法直接实现,只能控制dataset中的datable,增加一个新的空得datarow,然后重新绑定这里是msdn中的示例:
    下面的示例展示如何使用 Items 集合来显示 DataGrid 控件中各项的内容。[Visual Basic] 
    <%@ Import Namespace="System.Data" %>
     
    <html>
    <script language="VB" runat="server">
     
        Dim Cart As DataTable
        Dim CartView As DataView
        
        Function CreateDataSource() As ICollection
            Dim dt As New DataTable()
            Dim dr As DataRow
            
            dt.Columns.Add(New DataColumn("IntegerValue", GetType(Int32)))
            dt.Columns.Add(New DataColumn("StringValue", GetType(String)))
            dt.Columns.Add(New DataColumn("CurrencyValue", GetType(Double)))
            
            Dim i As Integer
            For i = 0 To 9
                dr = dt.NewRow()
                
                dr(0) = i
                dr(1) = "Item " & i.ToString()
                dr(2) = 1.23 *(i + 1)
                
                dt.Rows.Add(dr)
            Next i
            
            Dim dv As New DataView(dt)
            Return dv
        End Function 'CreateDataSource
        Sub Page_Load(sender As Object, e As EventArgs)
            
            If Not IsPostBack Then
                ' Need to load this data only once.
                ItemsGrid.DataSource = CreateDataSource()
                ItemsGrid.DataBind()
            End If
        End Sub 'Page_Load
             Sub Button_Click(sender As Object, e As EventArgs)
            
            Dim item As DataGridItem
            For Each item In  ItemsGrid.Items
                Label1.Text &= "<br>" & item.Cells(0).Text & _
                            " " & item.Cells(1).Text & _
                            " " & item.Cells(2).Text
            Next item
        End Sub 'Button_Click
     
    </script>
     
    <body>
     
       <form runat=server>      <h3>DataGrid Items Collection Example</h3>
     
          <asp:DataGrid id="ItemsGrid" runat="server"
               BorderColor="black"
               BorderWidth="1"
               CellPadding="3"
               ShowFooter="true"
               AutoGenerateColumns="true">         <HeaderStyle BackColor="#00aaaa">
             </HeaderStyle>         <FooterStyle BackColor="#00aaaa">
             </FooterStyle>
       
          </asp:DataGrid>
     
          <br>      <asp:Button id="Button1"
               Text="Display Contents of Items Collection"
               OnClick="Button_Click"
               runat="server"/>      <br>
     
          <asp:Label id="Label1" 
               runat="server"/>
     
       </form>
     
    </body>
    </html>
    [C#] 
    <%@ Import Namespace="System.Data" %>
     
    <html>
    <script language="C#" runat="server">
     
       DataTable Cart;
       DataView CartView;
     
       ICollection CreateDataSource() 
       {
          DataTable dt = new DataTable();
          DataRow dr;
     
          dt.Columns.Add(new DataColumn("IntegerValue", typeof(Int32)));
          dt.Columns.Add(new DataColumn("StringValue", typeof(string)));
          dt.Columns.Add(new DataColumn("CurrencyValue", typeof(double)));
     
          for (int i = 0; i < 10; i++) 
          {
             dr = dt.NewRow();
     
             dr[0] = i;
             dr[1] = "Item " + i.ToString();
             dr[2] = 1.23 * (i+1);
     
             dt.Rows.Add(dr);
          }
     
          DataView dv = new DataView(dt);
          return dv;
       }
     
       void Page_Load(Object sender, EventArgs e) 
       {
     
          if (!IsPostBack) 
          {
             // Need to load this data only once.
             ItemsGrid.DataSource = CreateDataSource();
             ItemsGrid.DataBind();
          }
     
       }
     
       void Button_Click(Object sender, EventArgs e) 
       {
     
          foreach (DataGridItem item in ItemsGrid.Items)
          { 
             Label1.Text += "<br>" + item.Cells[0].Text + 
                            " " + item.Cells[1].Text + 
                            " " + item.Cells[2].Text;
          }
     
       }
     
    </script>
     
    <body>
     
       <form runat=server>      <h3>DataGrid Items Collection Example</h3>
     
          <asp:DataGrid id="ItemsGrid" runat="server"
               BorderColor="black"
               BorderWidth="1"
               CellPadding="3"
               ShowFooter="true"
               AutoGenerateColumns="true">         <HeaderStyle BackColor="#00aaaa">
             </HeaderStyle>         <FooterStyle BackColor="#00aaaa">
             </FooterStyle>
       
          </asp:DataGrid>
     
          <br>      <asp:Button id="Button1"
               Text="Display Contents of Items Collection"
               OnClick="Button_Click"
               runat="server"/>      <br>
     
          <asp:Label id="Label1" 
               runat="server"/>
     
       </form>
     
    </body>
    </html>
    [JScript] 
    <%@ Import Namespace="System.Data" %>
     
    <html>
    <script language="JScript" runat="server">
     
          var Cart : DataTable;
          var CartView : DataView;
     
          function CreateDataSource() : ICollection 
          {
           
             var dt : DataTable = new DataTable();
             var dr : DataRow;
     
             dt.Columns.Add(new DataColumn("IntegerValue", Int32));
             dt.Columns.Add(new DataColumn("StringValue", System.String));
             dt.Columns.Add(new DataColumn("CurrencyValue", double));
     
             for (var i : int = 0; i < 9; i++) 
             {
                dr = dt.NewRow();
     
                dr[0] = i;
                dr[1] = "Item " + i.ToString();
                dr[2] = 1.23 * (i+1);
     
                dt.Rows.Add(dr);
             }
     
             var dv : DataView = new DataView(dt);
             return dv;
          }
      
       function Page_Load(sender, e : EventArgs) 
       {
     
          if (!IsPostBack) 
          {
             // Need to load this data only once.
             ItemsGrid.DataSource = CreateDataSource();
             ItemsGrid.DataBind();
          }
     
       }
     
       function Button_Click(sender, e : EventArgs) 
       {
     
          for (var item : DataGridItem in ItemsGrid.Items)
          { 
             Label1.Text += "<br>" + item.Cells[0].Text + 
                            " " + item.Cells[1].Text + 
                            " " + item.Cells[2].Text;
          }
     
       }
     
    </script>
     
    <body>
     
       <form runat=server>      <h3>DataGrid Items Collection Example</h3>
     
          <asp:DataGrid id="ItemsGrid" runat="server"
               BorderColor="black"
               BorderWidth="1"
               CellPadding="3"
               ShowFooter="true"
               AutoGenerateColumns="true">         <HeaderStyle BackColor="#00aaaa">
             </HeaderStyle>         <FooterStyle BackColor="#00aaaa">
             </FooterStyle>
       
          </asp:DataGrid>
     
          <br>      <asp:Button id="Button1"
               Text="Display Contents of Items Collection"
               OnClick="Button_Click"
               runat="server"/>      <br>
     
          <asp:Label id="Label1" 
               runat="server"/>
     
       </form>
     
    </body>
    </html>
    [C++] 没有可用于 C++ 的示例。若要查看 Visual Basic、C# 或 JScript 示例,请单击页左上角的语言筛选器按钮 。