⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 webdataaccess.aspx

📁 书籍教程 >> .Net教程 >> asp.net编程精彩百例
💻 ASPX
📖 第 1 页 / 共 4 页
字号:

<p>
<Acme:TabControl runat="server">
<Tab Name="C#">
MyDataGrid.DataSource=ds;
MyDataGrid.DataMember="Authors";
MyDataGrid.DataBind();
</Tab>

<Tab Name="VB">
MyDataGrid.DataSource=ds
MyDataGrid.DataMember="Authors"
MyDataGrid.DataBind()
</Tab>

<Tab Name="JScript">
MyDataGrid.DataSource=ds;
MyDataGrid.DataMember="Authors";
MyDataGrid.DataBind();
</Tab>
</Acme:TabControl>


<p>
还可以直接绑定到 <b>SqlDataReader</b>。这种情况下只是显示数据,因此 <b>SqlDataReader</b> 的仅向前特性非常适合此方案,而您则从 <b>SqlDataReader</b> 提供的性能提升获益。


<p>
<Acme:LangSwitch runat="server">
  <CsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/webforms/data/CS/datagrid1.1.aspx"
  ViewSource="/quickstart/aspplus/samples/webforms/data/datagrid1.1.src"
  Icon="/quickstart/aspplus/images/datagrid1.gif"
  Caption="C# DataGrid1.1.aspx"
  runat="server" />
  </CsTemplate>
  <VbTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/webforms/data/VB/datagrid1.1.aspx"
  ViewSource="/quickstart/aspplus/samples/webforms/data/datagrid1.1.src"
  Icon="/quickstart/aspplus/images/datagrid1.gif"
  Caption="VB DataGrid1.1.aspx"
  runat="server" />
  </VbTemplate>
  <JsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/webforms/data/JS/datagrid1.1.aspx"
  ViewSource="/quickstart/aspplus/samples/webforms/data/datagrid1.1.src"
  Icon="/quickstart/aspplus/images/datagrid1.gif"
  Caption="JScript DataGrid1.1.aspx"
  runat="server" />
  </JsTemplate>
</Acme:LangSwitch>

<p>
<b>注意:</b>   本节的其余部分只显示了数据访问的 <b>DataSet</b> 模型;不过,可以重写任何这些示例以便同样利用 <b>SQLDataReader</b>。

<!--BEGIN SECTION--> <br> <a name="param"><br> <span class="subhead">执行参数化选择</span>
<p>

也可以使用 <b>SqlDataAdapter</b> 对象执行参数化选择。下面的示例显示可以如何修改使用从 select <b>HtmlControl</b> 传递的值所选择的数据。
<p>

<Acme:LangSwitch runat="server">
  <CsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/webforms/data/CS/datagrid2.aspx"
  ViewSource="/quickstart/aspplus/samples/webforms/data/datagrid2.src"
  Icon="/quickstart/aspplus/images/datagrid2.gif"
  Caption="C# DataGrid2.aspx"
  runat="server" />
  </CsTemplate>
  <VbTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/webforms/data/VB/datagrid2.aspx"
  ViewSource="/quickstart/aspplus/samples/webforms/data/datagrid2.src"
  Icon="/quickstart/aspplus/images/datagrid2.gif"
  Caption="VB DataGrid2.aspx"
  runat="server" />
  </VbTemplate>
  <JsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/webforms/data/JS/datagrid2.aspx"
  ViewSource="/quickstart/aspplus/samples/webforms/data/datagrid2.src"
  Icon="/quickstart/aspplus/images/datagrid2.gif"
  Caption="JScript DataGrid2.aspx"
  runat="server" />
  </JsTemplate>
</Acme:LangSwitch>

<p>
<b>SqlDataAdapter</b> 维护一个可用于用值替换变量标识符(由名称前的“@”表示)的 <b>Parameters</b> 集合。在该集合中添加一个指定参数的名称、类型和大小的新 <b>SqlParameter</b>,然后将它的 <b>Value</b> 属性设置为选择的值。
<p>

<p><Acme:TabControl runat="server">
<Tab Name="C#">
myCommand.SelectCommand.Parameters.Add(new SqlParameter("@State", SqlDbType.NVarChar, 2));
myCommand.SelectCommand.Parameters["@State"].Value = MySelect.Value;
</Tab>

<Tab Name="VB">
myCommand.SelectCommand.Parameters.Add(New SqlParameter("@State", SqlDbType.NVarChar, 2))
myCommand.SelectCommand.Parameters("@State").Value = MySelect.Value
</Tab>

<Tab Name="JScript">
myCommand.SelectCommand.Parameters.Add(new SqlParameter("@State", SqlDbType.NVarChar, 2));
myCommand.SelectCommand.Parameters("@State").Value = MySelect.Value;
</Tab>

</Acme:TabControl><p>

<p>
<b>重要说明:</b>   注意 <b>DataGrid</b> 的 <b>EnableViewState</b> 属性已设置为 <b>false</b>。如果每个请求中都要填充数据,让 <b>DataGrid</b> 存储将通过往返行程由窗体发送来发送的状态信息没有好处。因为 <b>DataGrid</b> 在维护状态时存储其所有数据,适当时将其关闭很重要,这样可以提高页面性能。
<p>

DataGrid2.aspx 静态填充选择框的值,但这不太适合那些值在数据库中会更改的情况。因为 select <b>HtmlControl</b> 也支持 <b>IEnumerable DataSource</b> 属性,可以转而使用选择查询动态填充选择框,这将保证数据库和用户界面始终同步。下面的示例说明此过程。

<p>

<Acme:LangSwitch runat="server">
  <CsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/webforms/data/CS/datagrid3.aspx"
  ViewSource="/quickstart/aspplus/samples/webforms/data/datagrid3.src"
  Icon="/quickstart/aspplus/images/datagrid3.gif"
  Caption="C# DataGrid3.aspx"
  runat="server" />
  </CsTemplate>
  <VbTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/webforms/data/VB/datagrid3.aspx"
  ViewSource="/quickstart/aspplus/samples/webforms/data/datagrid3.src"
  Icon="/quickstart/aspplus/images/datagrid3.gif"
  Caption="VB DataGrid3.aspx"
  runat="server" />
  </VbTemplate>
  <JsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/webforms/data/JS/datagrid3.aspx"
  ViewSource="/quickstart/aspplus/samples/webforms/data/datagrid3.src"
  Icon="/quickstart/aspplus/images/datagrid3.gif"
  Caption="JScript DataGrid3.aspx"
  runat="server" />
  </JsTemplate>
</Acme:LangSwitch>


<!--BEGIN SECTION--> <br> <a name="insert"><br> <span class="subhead">在 SQL 数据库中插入数据</span>
<p>

若要将行插入到数据库中,可以向页中添加简单的输入窗体,并在窗体提交事件处理程序中执行插入命令。与前两个示例一样,使用命令对象的 Parameters 集合填充命令的值。注意,在试图插入到数据库中之前,还要检查以确保所需的值非空。这将防止与数据库的字段约束意外冲突。还需在 try/catch 块的内部执行插入命令,以防插入行的主键已经存在。

<p>

<Acme:LangSwitch runat="server">
  <CsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/webforms/data/CS/datagrid4.aspx"
  ViewSource="/quickstart/aspplus/samples/webforms/data/datagrid4.src"
  Icon="/quickstart/aspplus/images/datagrid4.gif"
  Caption="C# DataGrid4.aspx"
  runat="server" />
  </CsTemplate>
  <VbTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/webforms/data/VB/datagrid4.aspx"
  ViewSource="/quickstart/aspplus/samples/webforms/data/datagrid4.src"
  Icon="/quickstart/aspplus/images/datagrid4.gif"
  Caption="VB DataGrid4.aspx"
  runat="server" />
  </VbTemplate>
  <JsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/webforms/data/JS/datagrid4.aspx"
  ViewSource="/quickstart/aspplus/samples/webforms/data/datagrid4.src"
  Icon="/quickstart/aspplus/images/datagrid4.gif"
  Caption="JScript DataGrid4.aspx"
  runat="server" />
  </JsTemplate>
</Acme:LangSwitch>

<p>
不用显式检查输入值,而是可以轻松地使用 ASP.NET 提供的验证控件。下面的示例说明具体如何做。注意,使用 RegEx 验证程序提供了检查作者 ID、邮政编码和电话号码字段格式的额外好处。
<p>

<Acme:LangSwitch runat="server">
  <CsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/webforms/data/CS/datagrid5.aspx"
  ViewSource="/quickstart/aspplus/samples/webforms/data/datagrid5.src"
  Icon="/quickstart/aspplus/images/datagrid5.gif"
  Caption="C# DataGrid5.aspx"
  runat="server" />
  </CsTemplate>
  <VbTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/webforms/data/VB/datagrid5.aspx"
  ViewSource="/quickstart/aspplus/samples/webforms/data/datagrid5.src"
  Icon="/quickstart/aspplus/images/datagrid5.gif"
  Caption="VB DataGrid5.aspx"
  runat="server" />
  </VbTemplate>
  <JsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/webforms/data/JS/datagrid5.aspx"
  ViewSource="/quickstart/aspplus/samples/webforms/data/datagrid5.src"
  Icon="/quickstart/aspplus/images/datagrid5.gif"
  Caption="JScript DataGrid5.aspx"
  runat="server" />
  </JsTemplate>
</Acme:LangSwitch>

<!--BEGIN SECTION--> <br> <a name="update"><br> <span class="subhead">更新 SQL 数据库中的数据</span>
<p>
更新数据库在 Web 应用程序中可能经常很棘手。针对这种情况,<b>DataGrid</b> 控件提供了一些使更新更容易的内置支持。为了允许对行进行编辑,<b>DataGrid</b> 支持整型 <b>EditItemIndex</b> 属性,该属性指示网格的哪一行应该是可编辑的。设置了该属性后,<b>DataGrid</b> 按该索引将行呈现为文本输入框,而不是简单的标签。值 -1(默认值)指示没有行是可编辑的。页可以在服务器端窗体中包含 <b>DataGrid</b>,并通过 <b>DataGrid</b> 的对象模型获取对编辑数据的访问。
<p>
为了确定哪一行应该是可编辑的,需要一种方法接受用户关于他们希望编辑哪一行的输入。<b>DataGrid</b> 可以包含一个 <b>EditCommandColumn</b> 来呈现激发三个特殊事件的链接:<b>EditCommand</b>、<b>UpdateCommand</b> 和 <b>CancelCommand</b>。<b>EditCommandColumn</b> 以声明方式添加到 <b>DataGrid</b> 的 Columns 集合,如下面的示例所示。

<div class="code"><pre>
&lt;ASP:DataGrid id="MyDataGrid" runat="server"
  ...
  OnEditCommand="MyDataGrid_Edit"
  OnCancelCommand="MyDataGrid_Cancel"
  OnUpdateCommand="MyDataGrid_Update"
  DataKeyField="au_id"
&gt;

  &lt;Columns&gt;
    &lt;asp:EditCommandColumn EditText="Edit" CancelText="Cancel" UpdateText="Update" /&gt;
  &lt;/Columns&gt;

&lt;/ASP:DataGrid&gt;
</pre></div>

在 <b>DataGrid</b> 标记本身上,将事件处理程序连到从 <b>EditCommandColumn</b> 激发的每个命令。这些处理程序的 <b>DataGridCommandEventArgs</b> 参数使您得以直接访问由用来设置 <b>DataGrid</b> 的 <b>EditItemIndex</b> 的客户端选择的索引。注意,需要重新绑定 <b>DataGrid</b> 以使更改生效,如下面的示例所示。
<p>

<p><Acme:TabControl runat="server">
<Tab Name="C#">
public void MyDataGrid_Edit(Object sender, DataGridCommandEventArgs E) {
    MyDataGrid.EditItemIndex = (int)E.Item.ItemIndex;
    BindGrid();
}
</Tab>

<Tab Name="VB">
Public Sub MyDataGrid_Edit(sender As Object, E As DataGridCommandEventArgs)
    MyDataGrid.EditItemIndex = E.Item.ItemIndex
    BindGrid()
End Sub
</Tab>

<Tab Name="JScript">
public function MyDataGrid_Edit(sender:Object, E:DataGridCommandEventArgs) : void {
    MyDataGrid.EditItemIndex = int(E.Item.ItemIndex);
    BindGrid();
}
</Tab>

</Acme:TabControl><p>

<p>
当编辑某行 <b>DataGrid</b> 时,<b>EditCommandColumn</b> 呈现 <b>Update</b> 和 <b>Cancel</b> 链接。如果客户端选择 <b>Cancel</b>,只需将 <b>EditItemIndex</b> 设置回 -1。但如果客户端选择 <b>Update</b>,则需要对数据库执行更新命令。执行更新查询要求知道希望更新的行的数据库中的主键。为支持此要求,<b>DataGrid</b> 公开一个可以设置为主键字段名的 <b>DataKeyField</b> 属性。在连到 <b>UpdateCommand</b> 的事件处理程序中,可以从 <b>DataGrid</b> 的 DataKeys 集合检索键名。使用事件的 <b>ItemIndex</b> 在此集合中索引,如下面的示例所示。
<p>

<p><Acme:TabControl runat="server">
<Tab Name="C#">
myCommand.Parameters["@Id"].Value = MyDataGrid.DataKeys[(int)E.Item.ItemIndex];
</Tab>

<Tab Name="VB">
myCommand.Parameters("@Id").Value = MyDataGrid.DataKeys(CType(E.Item.ItemIndex, Integer))
</Tab>

<Tab Name="JScript">
myCommand.Parameters["@Id"].Value = MyDataGrid.DataKeys[int(E.Item.ItemIndex)];
</Tab>

</Acme:TabControl><p>

<p>
在 Update 事件处理程序的最后,将 <b>EditItemIndex</b> 设置回 -1。下面的示例说明此代码的运行。
<p>

<Acme:LangSwitch runat="server">
  <CsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/webforms/data/CS/datagrid6.aspx"
  ViewSource="/quickstart/aspplus/samples/webforms/data/datagrid6.src"
  Icon="/quickstart/aspplus/images/datagrid6.gif"
  Caption="C# DataGrid6.aspx"
  runat="server" />

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -