2011-09-15 49 views
2

我想要一个RADGRID中的复选框。以下是详细的要求:RadGrid中的CheckBox并将数据发送到数据库

所有的radgrid列我从存储过程中填充AutoGenerateColumns =“True”。我需要一个额外的复选框列。
我没有/需要任何字段绑定复选框在gridload。

用户可以选中任意数量的复选框,并将选定行的第二列数据发送到数据库。

以下是我用来显示复选框的代码,但完整的复选框列即将停用。

<MasterTableView CommandItemDisplay="None" HeaderStyle-BorderStyle="None"> 
<Columns> 
<rad:GridCheckBoxColumn HeaderText="LinkRisk" AllowFiltering="false" ReadOnly="false" HeaderStyle-Width="3%"> 
</rad:GridCheckBoxColumn> 
</Columns> 
</MasterTableView> 

我需要帮助:
1.获得的复选框。
2.如何发送数据到数据库。
3.如何将其保存在数据库中。

假定检查了radgrid的4,5,6行。
我需要在这些行发送第二列的数据即说44,55,66
所以在我的数据库我的表的3个新行应插入为:
ID值一个66

在此先感谢!

+0

你检查网格属性是它设置只读=假,也editRow =真的吗? –

+0

我无法在RADGRID中找到这两个属性。但是这意味着我没有将其设置为不可编辑模式? – RMN

+0

我需要所有的复选框为可编辑的负载,而不是编辑按钮的点击。 – RMN

回答

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> 

步骤2: 从数据源自动生成的那些后添加以下列。如果您查看第1步中的代码,您会看到我已经添加了它。您可以逐字复制并粘贴以下代码,它将起作用。

<telerik:GridTemplateColumn HeaderText="Update"> 
      <ItemTemplate> 
       <asp:CheckBox ID="CheckBox2" runat="server" AutoPostBack="true" OnCheckedChanged="CheckBox2_CheckedChanged" /> 
      </ItemTemplate> 
     </telerik:GridTemplateColumn> 

在此点上运行网格是这样的:

A Walkthrough for your convienience 第3步: 在现场的DataKeyNames =“”在你的网格属性,你需要添加的名称您要从中读取数据的列。你说你想要第二栏的数据,所以我也使用了第二栏。在radgrid控件我的第二列有数据字段=“产品名称”,所以我需要将它添加到我的网格的DataKeyNames属性,使得它的DataKeyNames =“产品名称”。这将允许我们在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) 
    { 

    } 
} 

由于您可以在此代码中看到“ProductName”,因此您必须将其更改为您的列的名称。

第5步:

插入那将需要将数据发送到你的数据库,如果(状态)中的代码的条件,因此,只有当你选择了它的第一次火灾。

注:

如果你需要从其他列的数据,所有你需要做的就是添加列名到的DataKeyNames =“列1,列2”字段,然后通过C#中引用它们:

string value1 = item.GetDataKeyValue("column1").ToString(); 
string value2 = item.GetDataKeyValue("column2").ToString(); 

然后,您可以将这些值连接到您可能使用的任何DB代码。

我不知道甲骨文,但我加入到我的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(); 

这是一个基本的更新,但你应该明白我的意思的问候将其应用于将其插入到表中的代码。

+0

我解释的问题是如何用autogeneratecolumns =“true”来做到这一点。我有一个类似的问题,但我的数据源来自一个CSV文件,我不想硬编码列。 – Toggi

1

使用模板列,而不是:

<tel:GridTemplateColumn> 
    <ItemTemplate> 
     <asp:Checkbox id="chk" runat="server" /> 
    </ItemTemplate> 
</tel:GridTemplateColumn> 

与复选框列的问题是,它只会显示当前行进行编辑。它会显示每行的复选框。

相关问题