RMN*_*RMN 2 c# asp.net telerik oracle10g radgrid
我想要一个RADGRID中的复选框.以下是详细要求:
我使用存储过程中的AutoGenerateColumns ="True"填充所有radgrid列.我需要一个额外的复选框列.
在gridload期间,我没有/需要任何字段来绑定复选框.
用户可以检查任意数量的复选框,并且应将第二列所选行的数据发送到数据库.
以下是我用于显示复选框的代码,但完整的复选框列将被禁用.
<MasterTableView CommandItemDisplay="None" HeaderStyle-BorderStyle="None">
<Columns>
<rad:GridCheckBoxColumn HeaderText="LinkRisk" AllowFiltering="false" ReadOnly="false" HeaderStyle-Width="3%">
</rad:GridCheckBoxColumn>
</Columns>
</MasterTableView>
Run Code Online (Sandbox Code Playgroud)
我需要帮助:
1.获取复选框.
2.如何将数据发送到数据库.
3.如何将其保存在数据库中.
假设检查了radgrid的第4,5,6行.
我需要在这些行中发送第二列的数据,即44,55,66.
所以在我的数据库中,我的表中应该插入3个新行:
ID值a 44 a 55 a 66
提前致谢!
Kre*_*epN 11
我继续按照"Emaad Ali"的评论来帮助您找到解决方案.
步骤1:
创建您的Radgrid.(我使用Northwind数据库作为数据源,因为它很简单并且应该很容易跟随.)在您认为"代码重载"之前,只需使用visual studio的向导连接到您的数据源,它将生成下面的大部分代码根据您所需的数据为您服务.
<telerik:RadGrid ID="RadGrid1" runat="server" CellSpacing="0"
DataSourceID="SqlDataSource1" GridLines="None">
<MasterTableView AutoGenerateColumns="False" DataKeyNames="ProductID, ProductName"
DataSourceID="SqlDataSource1">
<CommandItemSettings ExportToPdfText="Export to PDF"></CommandItemSettings>
<RowIndicatorColumn FilterControlAltText="Filter RowIndicator column">
<HeaderStyle Width="20px"></HeaderStyle>
</RowIndicatorColumn>
<ExpandCollapseColumn FilterControlAltText="Filter ExpandColumn column">
<HeaderStyle Width="20px"></HeaderStyle>
</ExpandCollapseColumn>
<Columns>
<telerik:GridBoundColumn DataField="ProductID" DataType="System.Int32"
FilterControlAltText="Filter ProductID column" HeaderText="ProductID"
ReadOnly="True" SortExpression="ProductID" UniqueName="ProductID">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="ProductName"
FilterControlAltText="Filter ProductName column" HeaderText="ProductName"
SortExpression="ProductName" UniqueName="ProductName">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="SupplierID" DataType="System.Int32"
FilterControlAltText="Filter SupplierID column" HeaderText="SupplierID"
SortExpression="SupplierID" UniqueName="SupplierID">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="UnitPrice" DataType="System.Decimal"
FilterControlAltText="Filter UnitPrice column" HeaderText="UnitPrice"
SortExpression="UnitPrice" UniqueName="UnitPrice">
</telerik:GridBoundColumn>
<telerik:GridTemplateColumn HeaderText="Update">
<ItemTemplate>
<asp:CheckBox ID="CheckBox2" runat="server" AutoPostBack="true" OnCheckedChanged="CheckBox2_CheckedChanged" />
</ItemTemplate>
</telerik:GridTemplateColumn>
</Columns>
<EditFormSettings>
<EditColumn FilterControlAltText="Filter EditCommandColumn column"></EditColumn>
</EditFormSettings>
</MasterTableView>
<FilterMenu EnableImageSprites="False"></FilterMenu>
<HeaderContextMenu CssClass="GridContextMenu GridContextMenu_Default"></HeaderContextMenu>
</telerik:RadGrid>
Run Code Online (Sandbox Code Playgroud)
第2步: 在数据源中自动生成的列之后添加以下列.如果你看一下步骤1中的代码,你会看到我已经添加了它.您可以逐字复制并粘贴下面的代码,它将起作用.
<telerik:GridTemplateColumn HeaderText="Update">
<ItemTemplate>
<asp:CheckBox ID="CheckBox2" runat="server" AutoPostBack="true" OnCheckedChanged="CheckBox2_CheckedChanged" />
</ItemTemplate>
</telerik:GridTemplateColumn>
Run Code Online (Sandbox Code Playgroud)
在此时运行时,网格将如下所示:
步骤3:
在网格属性下的DataKeyNames =""字段中,您需要添加要从中读取数据的列的名称.你说你想要第二列的数据,所以我也使用了第二列.在Radgrid我的第二列有DataField ="ProductName",所以我需要将它添加到我的网格的DataKeyNames属性,使其成为DataKeyNames ="ProductName".这将允许我们在步骤4中的c#代码中读取该列中的数据.
第4步:
转到后面的代码并粘贴此代码:
protected void CheckBox2_CheckedChanged(object sender, EventArgs e)
{
CheckBox chk = (CheckBox)sender;
bool status = chk.Checked;
GridDataItem item = (GridDataItem)chk.NamingContainer;
string keyvalue = item.GetDataKeyValue("ProductName").ToString();
string connectionString ="";
if(status)
{
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,此代码中引用了"ProductName",因此您必须将其更改为列的名称.
第5步:
在if(status)条件中插入将数据发送到DB所需的代码,以便它仅在您第一次检查时触发.
注意:
如果需要从其他列获取数据,您需要做的就是将列名添加到DataKeyNames ="column1,column2"字段,然后通过c#引用它们:
string value1 = item.GetDataKeyValue("column1").ToString();
string value2 = item.GetDataKeyValue("column2").ToString();
Run Code Online (Sandbox Code Playgroud)
然后,您可以将这些值连接到您可能使用的任何数据库代码中.
我不知道Oracle,但我添加到if(Status)的SQL代码如下所示:
SqlConnection SqlConnection = new SqlConnection(connectionString);
SqlCommand SqlCommand = new SqlCommand();
SqlCommand.CommandText = "update products set [UnitPrice] = '100' where [ProductName] = '" + keyvalue + "'";
SqlCommand.Connection = SqlConnection;
SqlConnection.Open();
SqlCommand.ExecuteNonQuery();
SqlConnection.Close();
Run Code Online (Sandbox Code Playgroud)
这是一个基本的更新,但您应该了解如何将它应用于将其插入表中的代码.
| 归档时间: |
|
| 查看次数: |
15658 次 |
| 最近记录: |