CheckBox в RadGrid и отправка данных в базу данных - PullRequest
2 голосов
/ 15 сентября 2011

Я хочу установить флажок в RADGRID. Ниже приведены подробные требования:

Все столбцы 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. Как сохранить его в базе данных.

Предполагается, что проверяется ряд 4,5,6 из сетки.
Мне нужно отправить данные второго столбца в этих строках, например, 44, 55, 66.
Таким образом, в моей базе данных 3 новые строки моей таблицы должны быть вставлены как:
Значение ID 44 55 66

Заранее спасибо!

Ответы [ 2 ]

11 голосов
/ 15 сентября 2011

Я пошел дальше и последовал комментарию «Эмаада Али», чтобы помочь вам найти решение.

Шаг 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 мой второй столбец имеет DataField = "ProductName", поэтому мне нужно добавить это в свойство DataKeyNames моей сетки, сделав его DataKeyNames = "ProductName".Это позволит нам прочитать данные в этом столбце в коде c # на шаге 4.

Шаг 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:

Вставьте код, который потребуется для отправки данных в вашу БД, в условное условие if (status), чтобы оно срабатывало только при первой проверке.

Примечание:

Если вам нужно получить данные из других столбцов, все, что вам нужно сделать, это добавить имена столбцов в поле DataKeyNames = "column1, column2" и затем ссылаться на них через c #:

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

Затем вы можете объединить эти значения в любой код БД, который вы можете использовать.

Я не знаю об Oracle, но мой код SQL, который я добавил в if (Status), выглядит следующим образом:

    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();

Это базовое обновление, но вы должны получить представление о том, как применить его к своему коду.вставьте его в стол.

2 голосов
/ 15 сентября 2011

используйте столбец шаблона вместо:

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

Проблема со столбцом флажка заключается в том, что он отображается только для редактирования текущей строки. Будет отображаться флажок для каждой строки.

...