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;
}
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;
}
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 示例,请单击页左上角的语言筛选器按钮 。