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

📄 webdataaccess.aspx

📁 书籍教程 >> .Net教程 >> asp.net编程精彩百例
💻 ASPX
📖 第 1 页 / 共 4 页
字号:
  </CsTemplate>
  <VbTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/webforms/data/VB/datagrid6.aspx"
  ViewSource="/quickstart/aspplus/samples/webforms/data/datagrid6.src"
  Icon="/quickstart/aspplus/images/datagrid6.gif"
  Caption="VB DataGrid6.aspx"
  runat="server" />
  </VbTemplate>
  <JsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/webforms/data/JS/datagrid6.aspx"
  ViewSource="/quickstart/aspplus/samples/webforms/data/datagrid6.src"
  Icon="/quickstart/aspplus/images/datagrid6.gif"
  Caption="JScript DataGrid6.aspx"
  runat="server" />
  </JsTemplate>
</Acme:LangSwitch>

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

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

<p>
<b>BoundColumn</b> 控件不是唯一可以在 <b>DataGrid</b> 的 Columns 集合中设置的控件。还可以指定 <b>TemplateColumn</b>,它使您可以完全控制列的内容。模板的内容可以是任意的;在 <b>DataGrid</b> 的列中可以呈现任何内容,包括服务器控件。下面的示例说明如何使用 <b>TemplateColumn</b> 控件将“State”列呈现为下拉列表并将“Contract”列呈现为复选框 HtmlControl。ASP.NET 数据绑定语法用于输出模板中的数据字段值。注意,有一些棘手的逻辑使下拉列表和复选框反射行中的数据状态。
<p>

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

<p>
正如可以将下拉列表或复选框 HtmlControl 放置在 <b>TemplateColumn</b> 中,也可以将其他控件放置在那里。下面的示例在尝试执行更新前,将 <b>Validator</b> 控件添加到列以检查客户端输入。
<p>

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

<!--BEGIN SECTION--> <br> <a name="delete"><br> <span class="subhead">删除 SQL 数据库中的数据</span>
<p>
从数据库删除非常类似于更新或插入命令,但仍然需要一种方法来确定要具体删除的网格中的行。可以添加到 <b>DataGrid</b> 的 Columns 集合的另一个控件是 <b>ButtonColumn</b> 控件,它只呈现按钮控件。<b>ButtonColumn</b> 支持可以设置为 <b>Delete</b> 的 <b>CommandName</b> 属性。在 <b>DataGrid</b> 上,将事件处理程序连到 <b>DeleteCommand</b>,并从那里执行删除操作。再一次使用 DataKeys 集合确定客户端选择的行。下面的示例说明此过程。
<p>

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


<!--BEGIN SECTION--> <br> <a name="sort"><br> <span class="subhead">将 SQL 数据库中的数据排序</span>
<p>
对任何网格的共同要求是能够将它包含的数据排序。虽然 <b>DataGrid</b> 控件不为您显式排序它的数据,但它确实提供一种方法,在用户单击可用来排序数据的列标头时调用事件处理程序。当 <b>DataGrid</b> 的 <b>AllowSorting</b> 属性设置为 <b>true</b> 时,它呈现将 <b>Sort</b> 命令激发回网格的列标头的超级链接。将 <b>DataGrid</b> 的 <b>OnSortCommand</b> 属性设置为当用户单击列链接时要调用的处理程序。列的名称作为 <b>DataGridSortCommandEventArgs</b> 参数上的 <b>SortExpression</b> 属性传递,该参数可用来设置绑定到网格的 <b>DataView</b> 的 <b>Sort</b> 属性。下面的示例说明此过程。<p>

<p><Acme:TabControl runat="server">
<Tab Name="C#">
&lt;script&gt;
    protected void MyDataGrid_Sort(Object Src, DataGridSortCommandEventArgs E) {
        ...
        DataView Source = ds.Tables["Authors"].DefaultView;
        Source.Sort = E.SortExpression;
        MyDataGrid.DataBind();
    }
&lt;/script&gt;

&lt;form runat="server"&gt;
    &lt;ASP:DataGrid id="MyDataGrid" OnSortCommand="MyDataGrid_Sort" AllowSorting="true" runat="server" /&gt;
&lt;/form&gt;
</Tab>

<Tab Name="VB">
&lt;script&gt;
    Protected Sub MyDataGrid_Sort(Src As Object, E As DataGridSortCommandEventArgs)
        ...
        DataView Source = ds.Tables("Authors").DefaultView
        Source.Sort = E.SortExpression
        MyDataGrid.DataBind()
    End Sub
&lt;/script&gt;

&lt;form runat="server"&gt;
    &lt;ASP:DataGrid id="MyDataGrid" OnSortCommand="MyDataGrid_Sort" AllowSorting="true" runat="server" /&gt;
&lt;/form&gt;
</Tab>

<Tab Name="JScript">
&lt;script&gt;
    protected function MyDataGrid_Sort(Src:Object, E:DataGridSortCommandEventArgs) : void {
        ...
        var Source:DataView = ds.Tables["Authors"].DefaultView;
        Source.Sort = E.SortExpression;
        MyDataGrid.DataBind();
    }
&lt;/script&gt;

&lt;form runat="server"&gt;
    &lt;ASP:DataGrid id="MyDataGrid" OnSortCommand="MyDataGrid_Sort" AllowSorting="true" runat="server" /&gt;
&lt;/form&gt;
</Tab>

</Acme:TabControl><p>

<p>
下面的示例显示此代码的运行。
<p>

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

<p>
当使用 <b>BoundColumn</b> 控件时,可以为每一列显式设置 <b>SortExpression</b> 属性,如下面的示例中的说明。
<p>

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


<!--BEGIN SECTION--> <br> <a name="masterdetail"><br> <span class="subhead">处理主-从关系</span>
<p>

数据模型经常包含仅用单个网格无法表示的关系。很常见的基于 Web 的界面应该允许选择一行数据将客户端定位到“详细信息”页,而该页显示有关所选行的详细信息。为了用 <b>DataGrid</b> 实现此目的,可以将 <b>HyperLinkColumn</b> 添加到 Columns 集合,该集合指定单击链接时客户端定位到的详细信息页。使用格式字符串语法替代作为 querystring 参数传递的此链接中的字段值。下面的示例说明此过程。

<p>

<div class="code"><pre>
    &lt;ASP:DataGrid id="MyDataGrid" runat="server"&gt;

      &lt;Columns&gt;
          &lt;asp:HyperLinkColumn
            DataNavigateUrlField="au_id"
            DataNavigateUrlFormatString="datagrid13_details.aspx?id={0}"
            Text="Get Details"
          /&gt;
      &lt;/Columns&gt;

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

<p>
在详细信息页上,检索 querystring 参数并执行联接选择以从数据库获取详细信息。下面的示例说明此情形。
<p>

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

⌨️ 快捷键说明

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