将具有搜索功能的数据网格视图中的数据保存到数据库

时间:2016-12-23 20:26:08

标签: c# wpf entity-framework wcf

目前我正在使用WPF和WCF。 WCF处理大部分数据库端并且是服务器,而WPF是我正在使用的客户端。在WCF端,我有:

public void SearchFixedCost_OnClick(object sender, RoutedEventArgs e)
    {
        TextBox search = _contentGrid.Children.OfType<TextBox>().First();
        DataGrid dataGrid = _contentGrid.Children.OfType<DataGrid>().First();
        ds = new DataSet();

        if (_contentGrid.Children.OfType<RadioButton>().First().IsChecked == true)
        {
            ds = cln.getAllFixedCostsName(search.Text);
        }
        else if (search.Text.All(char.IsDigit))
        {
            ds = cln.getAllFixedCostsExpenses(search.Text);
        }
        else
        {
            ds = null;
        }

        if (ds != null)
        {
            dataGrid.ItemsSource = ds.Tables["FixedCost"].DefaultView;
            dataGrid.Columns[0].Visibility = Visibility.Hidden;
        }
    }

    public void UpdateFixedCost_OnClick(object sender, RoutedEventArgs e)
    {
        cln.UpdateFixedCosts(ds);
    }

在WPF结尾我有:

<div data-role="view" id="divData">
  <ul data-role="listview" data-bind="ListofEmployeeData">
    <li>
      <span data-bind="text:EmpID"></span>
      <span data-bind="text:EmpName"></span>
      <span data-bind="text:Empemail"></span>
    </li>
  </ul>
</div>

function EmployeeDetails() {
  self.ListofEmployeeData = ko.observableArray([]);
  self.getTotalStarRating = function () {
    ///Mobile DeviceUUId
    var Model = {deviceUUID: deviceId};
    $.ajax({
      type: "POST",
      dataType: "json",
      data: Model,
      url: serverUrl + 'xx/xx/xx',
      success: function (data) {
        self.ListofEmployeeData($.map(data, function (item) {
          return new EmployeeModel(item);
        }));
      }
    });
  }
}

function EmployeeModel(item)
{
  self.EmpID=ko.observable(item.empId);
  self.EmpName=ko.observable(item.EmpName);
  self.Empemail=ko.observable(item.Empemail);
}

如果我不搜索任何特定内容,数据将成功更新。例如,如果我加载程序并单击搜索,它将生成该表的所有行,如果我更新其中一行并保存,则不会崩溃,并且更改将被推送到数据库。

如果我搜索特定行,则更改该行并保存。当它到达“adap.Update(ds,”FixedCost“)”时,我将在WCF端崩溃,我得到一个System.ServiceModel.FaultException。只有在我对该行或特定数据行进行更改时才会发生崩溃。

1 个答案:

答案 0 :(得分:1)

在wcf端的更新方法中,输入以下代码:

adap.TableMappings.Add("Table", "FixedCost");

在您的getAllFixedCostsName方法中,您告诉它将数据填充到名为“FixedCost”的表中。在update方法中,您创建了一个新的SqlDataAdapter,但该适配器对“FixedCost”一无所知。因此,它希望更新数据库中名为“Table”的表。它无法找到它,所以它在抱怨。