DataGrid学习六

发布时间: 2007-01-24 11:37    作者: 未知    来源: 未知    浏览:    评论

前一示例的一个问题是,当行可编辑时,主键字段 (au_id) 也呈现为文本输入框。您不希望客户端更改该值,因为需要它来确定更新数据库中的哪一行。幸运的是,可以通过精确指定每一列相对于可编辑行的外观,禁用将此列呈现为文本框。为此需在 DataGrid 的 Columns 集合中定义每一行,使用 BoundColumn 控件分配每一列的数据字段。使用此方法,您可以完全控制列的顺序,以及它们的 ReadOnly 属性。对于 au_id 列,将 ReadOnly 属性设置为 true。当行处于编辑模式时,此列将继续呈现为标签。下面的示例说明此方法。



aspx文件里面加入DataGrid控件半设置属性,代码如下:
<body MS_POSITIONING="GridLayout">
<form id="form7" method="post" runat="server">
<asp:Literal id="Message" runat="server"></asp:Literal>
<ASP:DataGrid id="DataGrid1" runat="server" Width="800" BackColor="#ccccff" BorderColor="black" ShowFooter="false" CellPadding="3" CellSpacing="0" Font-Name="Verdana" Font-Size="8pt" HeaderStyle-BackColor="#aaaadd" OnEditCommand="MyDataGrid_Edit" OnCancelCommand="MyDataGrid_Cancel" OnUpdateCommand="MyDataGrid_Update" DataKeyField="au_id" AutoGenerateColumns="false">
<Columns>
<asp:EditCommandColumn EditText="编辑" CancelText="取消" UpdateText="更新" ItemStyle-Wrap="false" />
<asp:BoundColumn HeaderText="au_id" SortExpression="au_id" ReadOnly="True" DataField="au_id" ItemStyle-Wrap="false" />
<asp:BoundColumn HeaderText="au_lname" SortExpression="au_lname" DataField="au_lname" />
<asp:BoundColumn HeaderText="au_fname" SortExpression="au_fname" DataField="au_fname" />
<asp:BoundColumn HeaderText="phone" SortExpression="phone" DataField="phone" />
<asp:BoundColumn HeaderText="address" SortExpression="address" DataField="address" />
<asp:BoundColumn HeaderText="city" SortExpression="city" DataField="city" />
<asp:BoundColumn HeaderText="state" SortExpression="state" DataField="state" />
<asp:BoundColumn HeaderText="zip" SortExpression="zip" DataField="zip" />
<asp:BoundColumn HeaderText="contract" SortExpression="contract" DataField="contract" />
</Columns>
</ASP:DataGrid>
</form>
</body>



aspx.cs文件中加入下面代码:
导入using System.Data.SqlClient;
定义SqlConnection myConnection;
private void Page_Load(object sender, System.EventArgs e)
{
myConnection = new SqlConnection("user id=sa;password=;initial catalog=pubs;data source=jeff");
if (!IsPostBack)
  BindGrid();
}



public void MyDataGrid_Edit(Object sender, DataGridCommandEventArgs E)
{
DataGrid1.EditItemIndex = (int)E.Item.ItemIndex;
BindGrid();
}



public void MyDataGrid_Cancel(Object sender, DataGridCommandEventArgs E)
{
DataGrid1.EditItemIndex = -1;
BindGrid();
}



public void MyDataGrid_Update(Object sender, DataGridCommandEventArgs E)
{
String updateCmd = "UPDATE Authors SET au_id = @Id, au_lname = @LName, au_fname = @FName, phone = @Phone, "
+ "address = @Address, city = @City, state = @State, zip = @Zip, contract = @Contract where au_id = @Id";
SqlCommand myCommand = new SqlCommand(updateCmd, myConnection);
myCommand.Parameters.Add(new SqlParameter("@Id", SqlDbType.NVarChar, 11));
myCommand.Parameters.Add(new SqlParameter("@LName", SqlDbType.NVarChar, 40));
myCommand.Parameters.Add(new SqlParameter("@FName", SqlDbType.NVarChar, 20));
myCommand.Parameters.Add(new SqlParameter("@Phone", SqlDbType.NChar, 12));
myCommand.Parameters.Add(new SqlParameter("@Address", SqlDbType.NVarChar, 40));
myCommand.Parameters.Add(new SqlParameter("@City", SqlDbType.NVarChar, 20));
myCommand.Parameters.Add(new SqlParameter("@State", SqlDbType.NChar, 2));
myCommand.Parameters.Add(new SqlParameter("@Zip", SqlDbType.NChar, 5));
myCommand.Parameters.Add(new SqlParameter("@Contract", SqlDbType.NVarChar,1));
myCommand.Parameters["@Id"].Value = DataGrid1.DataKeys[(int)E.Item.ItemIndex];
String[] cols = {"@Id","@LName","@FName","@Phone","@Address","@City","@State","@Zip","@Contract"};
int numCols = E.Item.Cells.Count;
for (int i=2; i<numCols-1; i++) //跳过第一、第二和最后一列
{
  String colvalue =((TextBox)E.Item.Cells[i].Controls[0]).Text;
  // 检查在所需字段中是否有空值
  if (i<6 && colvalue == "")
  {
  Message.Text = "错误:“作者 ID”、“姓名”或“电话”不允许使用空值";
  return;
  }
  myCommand.Parameters[cols[i-1]].Value = colvalue;
}



//追加最后一行,将 true/false 值转换为 0/1
if (String.Compare(((TextBox)E.Item.Cells[numCols-1].Controls[0]).Text, "True", true)==0)
  myCommand.Parameters["@Contract"].Value =  "1";
else
  myCommand.Parameters["@Contract"].Value =  "0";
myCommand.Connection.Open();
try
{
  myCommand.ExecuteNonQuery();
  Message.Text = "<b>已更新记录</b><br>" + updateCmd;
  DataGrid1.EditItemIndex = -1;
}
catch (SqlException e)
{
  if (e.Number == 2627)
   Message.Text = "错误:已存在具有相同主键的记录";
  else
   Message.Text = "错误:未能更新记录,请确保正确填写了字段";
}



myCommand.Connection.Close();
BindGrid();
}
public void BindGrid()
{
SqlDataAdapter myCommand = new SqlDataAdapter("select * from Authors", myConnection);
DataSet ds = new DataSet();
myCommand.Fill(ds, "Authors");
DataGrid1.DataSource=ds.Tables["Authors"].DefaultView;
DataGrid1.DataBind();
}
上一篇 DataGrid学习七 下一篇 DataGrid学习五

TAG

Smile Big Smile Surprise Stick out tongue Wink Sad Tongue Tied Indifferent Crying Embarrassed Cool Angry Angel Devil [8-|] [:#] [:-*] [:^)] [<:o)] [|-)] Yes Beer Left Hug Music Star Time Snail Pizza Automobile Umbrella Computer Storm [mo] [8o|] [^o)] [+o(] [*-)] [8-)] Coffee No Drinks [Z] Right Hug Cake Broken Heart Gift Wilted Flower Movie Dog Idea Sleep Email Travel Paradise
呢称:

加粗 斜体 下划线 链接 图片 代码 邮件地址 引用 列表

最多只能输入100个字符

Tags

SQL 数据库 asp.net C# XML 控件 .NET教程 程序 事件 数据 安全 代码 Server 客户端 验证 数据库专栏 接口 文件 Oracle DataSet 函数 DataGrid 问题 .net return C#语言 JavaScript 服务 IIS 对象 语句 windows 继承 时间 web.config 设计 开发 参数 变量 解决 字符 ADO.net 环境 VB.Net语言 web 异常 工具 服务器 计算 实例 OLEDB Application VB Word WebService insert asp net 安装 记录

精华推荐

更多

精品下载

更多