小编Pau*_*aul的帖子

绑定到BindingList的DataGridView显示空行

此代码导致DataGridView grid显示空行,尽管它有一个DataPropertyName设置为"MyProp1" 的列:

public class MyClass
{
  public int MyProp1;
  public int MyProp2;
  public int MyProp3;
}

public class MyItems:IListSource
{
  BindingList<MyClass> _items = new BindingList<MyClass>();

  //..............................

  //IListSource
  public bool ContainsListCollection
  {
      get { return false; }
  }

  //IListSource
  public System.Collections.IList GetList()
  {
      return _items;
  }
}

MyItems i = new MyItems();
.............
//MyItems list is populated
.............
grid.DataSource = i;
Run Code Online (Sandbox Code Playgroud)

可能有什么不对?

如果我使用"MyProp1"列创建一个DataTable,其内容将以正确的方式显示.

c# data-binding datagridview bindinglist

1
推荐指数
1
解决办法
2347
查看次数

为什么要使用IDataReader而不是DbDataReader?

我在许多示例中看到了一种用法(IDataReader而不是DbDataReader使用其他ADO.NET接口而不是相应的类).

我知道这IDataReader是一个接口,DbDataReader是一个类,依此类推......我的问题不是关于接口如何与类不同.

IDataReader 描述了通用数据读取器的接口.

DbDataReader 也是通用的(但是抽象类).

他们的用法示例似乎是等效的.

为什么要使用通用数据读取器接口而不是使用通用数据读取器类?哪些情况只需要使用界面?哪些情况只需要使用课程?

一个典型的例子:

DbCommand cmd = conn.CreateCommand();
.....................
using (IDataReader reader = cmd.ExecuteReader())
{
    grid.DataSource = reader;
    grid.DataBind();
}
Run Code Online (Sandbox Code Playgroud)

.net c# ado.net

1
推荐指数
1
解决办法
1387
查看次数

Rails为控制器中的每个方法路由

我有一个Rails控制器用于测试目的:

class MyTestController < ApplicationController
  skip_before_action :verify_authenticity_token

  def test1
  end

  def test2
  end

  def test3
  end

  def test4
  end

  def test5
  end

  ........
end
Run Code Online (Sandbox Code Playgroud)

以下路线:

get '/my_test/test1', to: 'my_test#test1'
get '/my_test/test2', to: 'my_test#test2'
get '/my_test/test3', to: 'my_test#test3'
get '/my_test/test4', to: 'my_test#test4'
get '/my_test/test5', to: 'my_test#test5'
........................................
Run Code Online (Sandbox Code Playgroud)

如何为此控制器的每个未来公共方法创建一个路由,以排除每个方法添加一个路由的需要?

routes ruby-on-rails

1
推荐指数
1
解决办法
48
查看次数

Ruby TCPSocket读取直到自定义终结符字符

这是我的代码来监听客户端TCP套接字:

def initialize
    @msg = ''
    @messages = Queue.new
    @socket = TCPSocket.open('127.0.0.1', 2000)
    Thread.new do
        loop do
            ch = @socket.recv(1)
            if ch == "\n"
                puts @msg unless @msg.blank?
                @msg = ''
            else
                @msg += ch
            end
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

我不喜欢的是逐字节字符串连接.它应该不是内存效率高的.

read套接字读取的方法直到换行.例如,套接字可以读取直到某个自定义终结符字符0x00吗?

如果没有,那么你知道哪个内存高效的字符串正在添加?

ruby sockets string-concatenation terminator

1
推荐指数
1
解决办法
2007
查看次数

我的节目在哪里等?

我有一个带阻塞调用的Delphi 10多线程应用程序.当我退出时,有时不会从RAM卸载并且Delphi调试器不会停止.

如何(工具,方法)检测我的应用程序在哪个例程中等待?

delphi multithreading blocking

1
推荐指数
1
解决办法
107
查看次数

使用TIdTcpClient接收超时的部分数据

如何使用TIdTcpClient接收具有以下条件的100字节字符串?:

  • 如果没有任何内容,Read调用将被阻塞,线程将永远等待
  • 如果接收到100个字节,则Read调用应返回字节字符串
  • 如果接收到超过0个字节但少于100个字节,则读取调用应该在一些超时(比如1秒)后返回,以便在合理的时间内返回至少某些内容,而不会产生超时异常,因为Delphi IDE的调试模式中的异常处理没有方便.

我现在的最佳代码如下:

unit Unit2;

interface

uses
  System.Classes, IdTCPClient;

type
  TTcpReceiver = class(TThread)
  private
    _tcpc: TIdTCPClient;
    _onReceive: TGetStrProc;
    _buffer: AnsiString;
    procedure _receiveLoop();
    procedure _postBuffer;
  protected
    procedure Execute(); override;
  public
    constructor Create(); reintroduce;
    destructor Destroy(); override;
    property OnReceive: TGetStrProc read _onReceive write _onReceive;
  end;

implementation

uses
  System.SysUtils, Vcl.Dialogs, IdGlobal, IdExceptionCore;

constructor TTcpReceiver.Create();
begin
  inherited Create(True);
  _buffer := '';
  _tcpc := TIdTCPClient.Create(nil);
  //_tcpc.Host := '192.168.52.175';
  _tcpc.Host := '127.0.0.1';
  _tcpc.Port := 1;
  _tcpc.ReadTimeout := 1000;
  _tcpc.Connect();
  Suspended := False;
end; …
Run Code Online (Sandbox Code Playgroud)

delphi indy

1
推荐指数
1
解决办法
514
查看次数

Delphi Windows服务名称与项目名称冲突

我有一个名为DataCapture.dpr的基本文件

program DataCapture;
Run Code Online (Sandbox Code Playgroud)

内.

然后我必须给服务本身另一个名字,以避免名称冲突:

TDataCaptureService = class(TService)
Run Code Online (Sandbox Code Playgroud)

现在,当我注册它时,该服务在"DataCaptureService"注册表项下注册,但我想:

  1. 在"DataCapture"注册表项下注册它
  2. 保留DataCapture.exe文件名
  3. 保留DataCapture.dpr文件名

怎么做到这一点?

delphi windows-services

1
推荐指数
1
解决办法
148
查看次数

双击Windows Service可执行文件进行配置

我从Delphi IDE的模板编写了一个Delphi Win32 Windows Service应用程序,它在从服务控制面板安装和启动时运行良好.

现在我想为它编写一个配置应用程序,我想可能只需双击其可执行文件就可以成为自己的配置器.

我是这么认为的,因为当双击时,服务以某种方式区分它不是由服务控制管理系统执行的.

所以这是我的问题:

  1. Service应用程序如何区分简单运行和作为服务运行?
  2. 是否可以使用简单运行来执行除服务模式之外的某些操作?这会干扰服务模式吗?

delphi windows-services

1
推荐指数
1
解决办法
119
查看次数

与TIdTCPServer同时发送和接收

始终建议在的OnExecute事件处理程序中执行所有发送/接收任务TIdTCPServer,但我不理解以下内容:

如何等待输入的特定顺序,同时将一些数据发送到同一客户端?我不需要命令响应序列,但是我需要:

  • 不断发送实时数据
  • 同时接收回已编辑的数据
  • 并接收命令并为其提供响应。

例如,如果我们正在等待CR-LF:

procedure TSocketServer._serverExecute(AContext: TIdContext);
var
  msg: string;
begin
  msg := AContext.Connection.IOHandler.ReadLn();
  //Here we are only if CRLF was detected.
  //How to send while we are waiting?
  _log(msg);
end;
Run Code Online (Sandbox Code Playgroud)

delphi duplex indy tcpserver

1
推荐指数
1
解决办法
154
查看次数

如何以正确的字符串形式获取httpWebresponse的内容?

有时我会从几个网站得到一些乱码回复.

这是我的代码:

Stream responseStream = response.GetResponseStream();
buffer = new Byte[256];//
int bytesRead;
while ((bytesRead = responseStream.Read(buffer, 0, buffer.Length)) > 0)
{
   outStream.Write(buffer, 0, bytesRead);
   //resp=resp+ .UTF8.GetString(buffer, 0, bytesRead);
   resp=resp + Encoding.ASCII.GetString(buffer); //resp is string
}
Run Code Online (Sandbox Code Playgroud)

当我从www.google.co.in请求时,我在resp字符串中得到以下字符:

?\ B\0\0\0\0\0ερ}ÿ·F ?????????Ž?????? {7米??? OX吗?\ r?ÿ??? 33 ?? d; Y ???? N 0?

我该如何克服这个问题?它与编码有关吗?

c# character-encoding httpwebresponse responsestream

0
推荐指数
1
解决办法
2万
查看次数