this.Textbox1.DataBindings[0].Format+=new ConvertEventHandler(DecimalToCurrencyString);private void DecimalToCurrencyString(object sender, ConvertEventArgs cevent)
{
if(cevent.DesiredType != typeof(Datetime)) return;if(cevent.Value != System.DBNull.Value)//regardless of the Value of DBNull
cevent.Value = System.DBNull.Value;//不显示
}
{
if(cevent.DesiredType != typeof(Datetime)) return;if(cevent.Value != System.DBNull.Value)//regardless of the Value of DBNull
cevent.Value = System.DBNull.Value;//不显示
}
显示时用label,设置每一行.
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Data" %>
<html>
<body>
<form method=post runat="server">
<asp:DataGrid runat="server" ID="Datagrid1"
DataKeyField="EmployeeID"
OnEditCommand="Datagrid1_Edit"
OnUpdateCommand="Datagrid1_Update"
OnCancelCommand="Datagrid1_Cancel"
OnDeleteCommand="Datagrid1_Delete"
AutoGenerateColumns="False"
Width="100%"
HeaderStyle-Font-Size="10"
HeaderStyle-Font-Bold="true"
HeaderStyle-ForeColor="Red"
HeaderStyle-BackColor="Yellow"
HeaderStyle-BorderColor="Red"
HeaderStyle-BorderWidth="5"
FooterStyle-BorderColor="Red"
FooterStyle-BorderWidth="5"
ItemStyle-BackColor="LightCyan"
ItemStyle-ForeColor="DarkBlue"
AlternatingItemStyle-BackColor="LightYellow"
AlternatingItemStyle-ForeColor="Maroon">
<Columns>
<asp:EditCommandColumn ItemStyle-Width="25px"
EditText="<img border=0 alt='Edit record' src=Edit.gif>"
CancelText="<img border=0 alt='Cancel changes' src=Cancel.gif>"
UpdateText="<img border=0 alt='Accept changes' src=OK.gif>"
/>
<asp:ButtonColumn ItemStyle-Width="25px" ButtonType="LinkButton"
Text="<img border=0 src=Delete.gif>" CommandName="delete"
/>
<asp:BoundColumn HeaderText="ID" ItemStyle-Width="30px" DataField="EmployeeID" ReadOnly="true" />
<asp:TemplateColumn HeaderText="Title" ItemStyle-Width="50px">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "TitleOfCourtesy") %>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList runat="server" ID="EditTitle" DataSource='<%# TitlesOfCourtesy %>'
SelectedIndex='<%# GetSelectedTitle(DataBinder.Eval(Container.DataItem, "TitleOfCourtesy")) %>' />
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Name">
<ItemTemplate>
<b><%# DataBinder.Eval(Container.DataItem, "LastName") %></b>,
<%# DataBinder.Eval(Container.DataItem, "FirstName") %>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox runat="server" ID="EditLastName" Text='<%# DataBinder.Eval(Container.DataItem, "LastName") %>' />
<asp:TextBox runat="server" ID="EditFirstName" Text='<%# DataBinder.Eval(Container.DataItem, "FirstName") %>' />
</EditItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn HeaderText="City" ItemStyle-Width="150px" DataField="City" />
<asp:TemplateColumn HeaderText="USA?" ItemStyle-Width="35px" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:CheckBox runat="server" Enabled="false"
Checked='<%# DataBinder.Eval(Container.DataItem, "Country").ToString() == "USA" %>' />
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
</form>
</body>
</html><script runat="server" language="C#">
public string[] TitlesOfCourtesy
{
get {
return new string[4]{"Mr.", "Dr.", "Ms.", "Mrs."};
}
}
int GetSelectedTitle(object title)
{
return Array.IndexOf(TitlesOfCourtesy, title.ToString());
}
void Page_Load()
{
if (!Page.IsPostBack)
BindGrid();
}
void BindGrid()
{
// create the command and the connection
string connString = "server=(local);database=Northwind;uid=sa;pwd=;";
string sql = @"SELECT * FROM Employees";
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand(sql, conn);
// open the connection and get the Reader
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
// bind the reader to the DataList
Datagrid1.DataSource = reader;
Datagrid1.DataBind();
// close the reader and the connection
reader.Close();
conn.Close();
}
void Datagrid1_Edit(Object sender, DataGridCommandEventArgs e)
{
Datagrid1.EditItemIndex = (int)e.Item.ItemIndex;
BindGrid();
}
void Datagrid1_Cancel(Object sender, DataGridCommandEventArgs e)
{
Datagrid1.EditItemIndex = -1;
BindGrid();
} void Datagrid1_Update(Object sender, DataGridCommandEventArgs e)
{
// get the ID of the record to update
int empID = (int)Datagrid1.DataKeys[e.Item.ItemIndex];
// get the references to the edit controls
DropDownList title = (DropDownList)e.Item.FindControl("EditTitle");
TextBox lastName = (TextBox)e.Item.FindControl("EditLastName");
TextBox firstName = (TextBox)e.Item.FindControl("EditFirstName");
TextBox city = (TextBox)e.Item.Cells[5].Controls[0];
// create the connection and the UPDATE command
string connString = "server=(local);database=Northwind;uid=sa;pwd=;";
string sql = @"UPDATE Employees SET TitleOfCourtesy = @TitleOfCourtesy,
LastName = @LastName, FirstName = @FirstName, City = @City WHERE EmployeeID = @EmployeeID";
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand(sql, conn);
// create the required parameters
cmd.Parameters.Add(new SqlParameter("@TitleOfCourtesy", SqlDbType.NVarChar, 25));
cmd.Parameters["@TitleOfCourtesy"].Value = title.SelectedItem.Text.Trim();
cmd.Parameters.Add(new SqlParameter("@LastName", SqlDbType.NVarChar, 20));
cmd.Parameters["@LastName"].Value = lastName.Text.Trim();
cmd.Parameters.Add(new SqlParameter("@FirstName", SqlDbType.NVarChar, 10));
cmd.Parameters["@FirstName"].Value = firstName.Text.Trim();
cmd.Parameters.Add(new SqlParameter("@City", SqlDbType.NVarChar, 15));
cmd.Parameters["@City"].Value = city.Text.Trim();
cmd.Parameters.Add(new SqlParameter("@EmployeeID", SqlDbType.Int, 4));
cmd.Parameters["@EmployeeID"].Value = empID;
// execute the command
cmd.Connection.Open();
try {
cmd.ExecuteNonQuery();
}
catch (SqlException) {
// handle exception...
}
finally {
cmd.Connection.Close();
}
// stop the editing and rebind the grid
Datagrid1.EditItemIndex = -1;
BindGrid();
}
void Datagrid1_Delete(Object sender, DataGridCommandEventArgs e)
{
// get the ID of the record to update
int empID = (int)Datagrid1.DataKeys[e.Item.ItemIndex];
// create the connection and the DELETE command
string connString = "server=(local);database=Northwind;uid=sa;pwd=;";
string sql = @"DELETE FROM Employees WHERE EmployeeID = " + empID.ToString();
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand(sql, conn);
// execute the command
cmd.Connection.Open();
try {
cmd.ExecuteNonQuery();
}
catch (SqlException) {
// handle exception...
}
finally {
cmd.Connection.Close();
}
// rebind the grid
Datagrid1.EditItemIndex = -1;
BindGrid();
}
</script>
{
dataGrid1[ 3,3 ] = DBNull.Value;
}但是,我只是希望能够改变显示的值,而不改变DATATABLE中的值.请问,怎么实现?
using System;
using System.Data;
using System.Windows.Forms;
using System.Drawing;// This example shows how to create your own column style that
// hosts a control, in this case, a DateTimePicker.
public class DataGridTimePickerColumn : DataGridColumnStyle
{
private DateTimePicker myDateTimePicker = new DateTimePicker();
// The isEditing field tracks whether or not the user is
// editing data with the hosted control.
private bool isEditing; public DataGridTimePickerColumn() : base()
{
myDateTimePicker.Visible = false;
} protected override void Abort(int rowNum)
{
isEditing = false;
myDateTimePicker.ValueChanged -=
new EventHandler(TimePickerValueChanged);
Invalidate();
} protected override bool Commit
(CurrencyManager dataSource, int rowNum)
{
myDateTimePicker.Bounds = Rectangle.Empty;
myDateTimePicker.ValueChanged -=
new EventHandler(TimePickerValueChanged); if (!isEditing)
return true; isEditing = false; try
{
DateTime value = myDateTimePicker.Value;
SetColumnValueAtRow(dataSource, rowNum, value);
}
catch (Exception)
{
Abort(rowNum);
return false;
} Invalidate();
return true;
} protected override void Edit(
CurrencyManager source,
int rowNum,
Rectangle bounds,
bool readOnly,
string instantText,
bool cellIsVisible)
{
DateTime value = (DateTime)
GetColumnValueAtRow(source, rowNum);
if (cellIsVisible)
{
myDateTimePicker.Bounds = new Rectangle
(bounds.X + 2, bounds.Y + 2,
bounds.Width - 4, bounds.Height - 4);
myDateTimePicker.Value = value;
myDateTimePicker.Visible = true;
myDateTimePicker.ValueChanged +=
new EventHandler(TimePickerValueChanged);
}
else
{
myDateTimePicker.Value = value;
myDateTimePicker.Visible = false;
} if (myDateTimePicker.Visible)
DataGridTableStyle.DataGrid.Invalidate(bounds);
} protected override Size GetPreferredSize(
Graphics g,
object value)
{
return new Size(100, myDateTimePicker.PreferredHeight + 4);
} protected override int GetMinimumHeight()
{
return myDateTimePicker.PreferredHeight + 4;
} protected override int GetPreferredHeight(Graphics g,
object value)
{
return myDateTimePicker.PreferredHeight + 4;
} protected override void Paint(Graphics g,
Rectangle bounds,
CurrencyManager source,
int rowNum)
{
Paint(g, bounds, source, rowNum, false);
}
protected override void Paint(
Graphics g,
Rectangle bounds,
CurrencyManager source,
int rowNum,
bool alignToRight)
{
Paint(
g,bounds,
source,
rowNum,
Brushes.Red,
Brushes.Blue,
alignToRight);
}
protected override void Paint(
Graphics g,
Rectangle bounds,
CurrencyManager source,
int rowNum,
Brush backBrush,
Brush foreBrush,
bool alignToRight)
{
DateTime date = (DateTime)
GetColumnValueAtRow(source, rowNum);
Rectangle rect = bounds;
g.FillRectangle(backBrush,rect);
rect.Offset(0, 2);
rect.Height -= 2;
g.DrawString(date.ToString("d"),
this.DataGridTableStyle.DataGrid.Font,
foreBrush, rect);
} protected override void SetDataGridInColumn(DataGrid value)
{
base.SetDataGridInColumn(value);
if (myDateTimePicker.Parent != null)
{
myDateTimePicker.Parent.Controls.Remove
(myDateTimePicker);
}
if (value != null)
{
value.Controls.Add(myDateTimePicker);
}
} private void TimePickerValueChanged(object sender, EventArgs e)
{
this.isEditing = true;
base.ColumnStartedEditing(myDateTimePicker);
}
}
namespace DataGridColumnStyleExample
{
using System;
using System.Data;
using System.Windows.Forms;
using System.Drawing;
using System.ComponentModel;
public class MyForm : Form
{
private DataTable namesDataTable;
private DataGrid grid = new DataGrid();
public MyForm() : base()
{
InitForm(); namesDataTable = new DataTable("NamesTable");
namesDataTable.Columns.Add(new DataColumn("Name"));
DataColumn dateColumn = new DataColumn
("Date", typeof(DateTime));
namesDataTable.Columns.Add(dateColumn);
DataSet namesDataSet = new DataSet();
namesDataSet.Tables.Add(namesDataTable);
grid.DataSource = namesDataSet;
grid.DataMember = "NamesTable";
AddGridStyle();
AddData();
} private void AddGridStyle()
{
DataGridTableStyle myGridStyle = new DataGridTableStyle();
myGridStyle.MappingName = "NamesTable"; DataGridTextBoxColumn nameColumnStyle =
new DataGridTextBoxColumn();
nameColumnStyle.MappingName = "Name";
nameColumnStyle.HeaderText= "Name";
myGridStyle.GridColumnStyles.Add(nameColumnStyle); DataGridTimePickerColumn timePickerColumnStyle =
new DataGridTimePickerColumn();
timePickerColumnStyle.MappingName = "Date";
timePickerColumnStyle.HeaderText = "Date";
timePickerColumnStyle.Width = 100;
myGridStyle.GridColumnStyles.Add(timePickerColumnStyle); grid.TableStyles.Add(myGridStyle);
} private void AddData()
{
DataRow dRow = namesDataTable.NewRow();
dRow["Name"] = "Name 1";
dRow["Date"] = new DateTime(2001, 12, 01);
namesDataTable.Rows.Add(dRow); dRow = namesDataTable.NewRow();
dRow["Name"] = "Name 2";
dRow["Date"] = new DateTime(2001, 12, 04);
namesDataTable.Rows.Add(dRow); dRow = namesDataTable.NewRow();
dRow["Name"] = "Name 3";
dRow["Date"] = new DateTime(2001, 12, 29);
namesDataTable.Rows.Add(dRow); dRow = namesDataTable.NewRow();
dRow["Name"] = "Name 4";
dRow["Date"] = new DateTime(2001, 12, 13);
namesDataTable.Rows.Add(dRow); dRow = namesDataTable.NewRow();
dRow["Name"] = "Name 5";
dRow["Date"] = new DateTime(2001, 12, 21);
namesDataTable.Rows.Add(dRow); namesDataTable.AcceptChanges();
} private void InitForm()
{
this.Size = new Size(500, 500);
grid.Size = new Size(350, 250);
grid.TabStop = true;
grid.TabIndex = 1;
this.StartPosition = FormStartPosition.CenterScreen;
this.Controls.Add(grid);
}
[STAThread]
public static void Main()
{
MyForm myForm1= new MyForm();
myForm1.ShowDialog();
}
}
}